1. ホーム
  2. android

サービスインテントが明示されていること。インテント

2023-09-12 06:54:31

質問

私はブロードキャスト受信機(MyStartupIntentReceiver)を通じてサービスを呼び出すいくつかの時間のアプリを持っています。サービスを呼び出すためにブロードキャストレシーバー内のコードは次のとおりです。

public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("com.duk3r.eortologio2.MyService");
    context.startService(serviceIntent);
}

問題は、Android 5.0 Lollipop で次のエラーが発生することです (Android の以前のバージョンでは、すべて問題なく動作します)。

Unable to start receiver com.duk3r.eortologio2.MyStartupIntentReceiver: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.duk3r.eortologio2.MyService }

サービスが明示的に宣言され、正常に開始するためには、何を変更しなければならないのでしょうか?他の同様のスレッドでいくつかの回答を試してみましたが、メッセージは取り除かれたものの、サービスは開始されませんでした。

どのように解決するのですか?

アプリ内のサービスやアクティビティなどに対して行うインテント(意図)は、常にこの形式に従っている必要があります。

Intent serviceIntent = new Intent(context,MyService.class);
context.startService(serviceIntent);

または

Intent bi = new Intent("com.android.vending.billing.InAppBillingService.BIND");
bi.setPackage("com.android.vending");

暗黙のインテント(現在あなたのコードにあるもの)はセキュリティリスクとみなされます。