2

電話の起動時にサービスをスタートアップに登録しようとしています。

サービス クラスで 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>
4

2 に答える 2