0

私はこのように処理しようとしています:BroadcastReceiver start AlarmManager反復アクションでは、意図はIntentServiceに送信されます。ログから見ると、BroadcastReceiverはインテントを受け取り、AlarmManagerを開始しますが、IntentServiceは発生しません。ここで何が間違っていますか?AlarmManagerを使用してIntentServiceを修正することはできません

マニフェスト:

<receiver android:name=".wakefullBroadcastReciever.SimpleWakefulReciever" android:enabled="true" android:exported="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <action android:name="START"/> 
      </intent-filter> 
     </receiver> 

     <service 
      android:name=".wakefulService.NotificationWakefulIntentService" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="NOTIFY_INTENT" /> 
      </intent-filter> 
     </service> 

WakefulReciever:

public class SimpleWakefulReciever extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (!App.isRunning) { 
      Log.d("wakefull", "start"); 
      Intent startIntent = new Intent(context, NotificationWakefulIntentService.class); 
      startIntent.setAction(Utils.NOTIFY_INTENT); 
      PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0); 
      AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      am.setRepeating(AlarmManager.RTC_WAKEUP, 
        SystemClock.elapsedRealtime() + 3000, 5000, startPIntent); 
      App.isRunning = true; 
     } 
    } 
} 

IntentService:

public class NotificationWakefulIntentService extends IntentService { 

    public NotificationWakefulIntentService() { 
     super("NotificationWakefulIntentService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.d("time",(System.currentTimeMillis()/1000)+""); 
    } 
} 

答えて

0

あなたが明示的にServiceIntentを定義するが、getBroadcast()代わりのgetService()を呼んでいます。

変更は次のとおりです。

これに
PendingIntent startPIntent = PendingIntent 
    .getBroadcast(context, 0, startIntent, 0); 

PendingIntent startPIntent = PendingIntent 
    .getService(context, 0, startIntent, 0); 

また、これはどのようにWakefulBroadcastReceiver作品ではありません。これはヘルパークラスで、その目的はServiceが完了するまでWakeLockを提供することです。

WakefulBroadcastReceiverを延長するだけで何も達成できない場合は、とにかくonReceive()の間にWakeLockが保証されます。あなたは、(this answerをチェックアウト)毎時間を発射する正確なアラームを設定WakefulBroadcastReceiver.startWakefulService()を呼び出すことにより、onReceive()からあなたIntentServiceを開始し、onHandleIntent()に自分のものを行い、終了したらWakefulBroadcastReceiver.completeWakefulIntent()を呼び出す必要があります

:以下のコメントに答えるために

関連する問題