23

私のアプリケーションは、BOOT_COMPLETE BroadcastReceiver によって開始されるサービスを使用します。実行中にエラーが発生します

私のコード:

public class projet extends BroadcastReceiver { 
 public void onReceive(Context context, Intent intent) { 

  intent = new Intent(context, ScreenshotService.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  context.bindService(intent, aslServiceConn, Context.BIND_AUTO_CREATE);
}
}

エラー:

java.lang.RuntimeException: Unable to start receiver com.example.projet: android.content.ReceiverCallNotAllowedException: BroadcastReceiver components are not allowed to bind to services
4

8 に答える 8

15

が実行されていることがわかっている場合は、メソッドServiceを使用して取得できます( docsを参照)。BinderBroadcastReceiver.peekService(Context, Intent)peekService

しかし、他の回答ですでに述べたように、 aService内からa をバインドすることは許可されていませんBroadcastReceiver

于 2014-07-30T11:16:24.807 に答える
6

最善の方法は、最初にIntentServicefromBroadcastReceiver.onReceive()を使用して開始することです。

context.StartService(new Intent(context, YourIntentService.class));

次にIntentService.onHandleIntent()

@Override
protected void onHandleIntent(Intent intent) {
    mContext = getApplicationContext();
    mContext.bindService(new Intent("com.ServiceToBind.BIND"), yourConnection, Context.BIND_AUTO_CREATE);
}
于 2015-04-14T06:20:49.410 に答える
2

問題

BroadcastReceiverServiceここでの他の回答が示しているように、 s を a にバインドすることは許可されていません。

解決

私が使用した簡単な解決策は、Intentによって受信されたBroadcastReceiverを最初にバインドしたかったサービスに転送し、それonStartCommand()を処理するためにそのサービスのメソッドにコードを実装することです。

于 2016-03-01T07:02:17.413 に答える
0

BroadcastReceiver は bindService できません。次の URL で適切なソリューションを取得できます。

Android - 起動時にサービスを開始

于 2015-06-11T07:55:56.727 に答える