マニフェストで、またはJavaコードで直接?ACTION_POWER_CONNECTED をマニフェストに登録しようとしましたが、うまくいきませんでした。このレシーバーは Java コードでしか登録できないことがわかりました。レシーバーを登録する最良の方法はどれですか?
3 に答える
マニフェストに登録されているレシーバーは、アプリが実行されていない場合、ブロードキャストが確実に受信されるように別のプロセスを作成します。アクティビティまたはサービスに登録された受信者は、アクティビティ/サービスのライフサイクルに関連付けられているため、それらの登録も必ず解除する必要があります。どちらを使用するかは、アプリがブロードキャストを受信するたびに受信する必要があるか、アプリの実行時にのみ受信する必要があるかという問題に基づいています。
次の投稿が表示されます: 起動時にアプリケーションを開始する方法は?
これをマニフェストに追加します:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
次のようにマニフェストでサービスを定義します。
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
これで新しいクラスを作成します。
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent serviceIntent = new Intent(YourMainActivity);
context.startService(serviceIntent);
}
}
}
Honeycomb 以降、マニフェストに登録されている BroadCastReceivers は、アプリケーションが少なくとも 1 回実行されない限りトリガーされません。これはマルウェアから保護するためであり、ユーザーは明示的にアプリに許可を与える必要があります。明らかに、コードに登録すると、アプリが実行されるため、そのような問題はありません。