電話の起動時にサービスをスタートアップに登録しようとしています。
サービス クラスで BOOT_COMPLETED BroadcastReciever をセットアップしました。
public int onStartCommand(Intent intent, int flags, int startId)
{
startService(intent);
_bootCompletedReciever = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(TAG, "Got boot completed");
}
};
IntentFilter filter = new IntentFilter("android.intent.action.BOOT_COMPLETED");
registerReceiver(_bootCompletedReciever, filter);
return START_NOT_STICKY;
}
ただし、呼び出されていません。マニフェストにアクセス許可が設定されています。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
電話の起動時に(マニフェストでブロードキャストに登録せずに)このブロードキャストをサービスで起動する際に何が欠けているか知っていますか?
答え
この場合、起動時にサービスを呼び出すクラスを登録するために XML を使用する必要がありました。
public class BootBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent service = new Intent(context, S_GPS.class);
context.startService(service);
}
}
そしてマニフェストで:
<receiver android:name=".BroadcastReceivers.BootBroadcastReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>