2017-12-07 11 views
-1

私は毎日実行する必要があるアラームマネージャを作成しています。 このメソッドはMainActivity.Autで呼び出されているので、アラームは1回だけ設定する必要がありますが、常にPending intent nullを返します。 私は、それが作成された後、再びアラームを設定することなく、同じ保留中の意図を返すことを望んだ。あなたのPendingIntentを作成中保留中のIntentは常にAlarmManagerのnullを返します

public void setAlarm() { 
    Intent intent = new Intent(context, BroadcastLogRaces.class); 

    PendingIntent pi = PendingIntent.getBroadcast(context, 99, 
      intent,PendingIntent.FLAG_NO_CREATE); 

    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    if (pi == null) { 

     Calendar calendar = Calendar.getInstance(); 

     calendar.set(Calendar.HOUR_OF_DAY, 19); 
     calendar.set(Calendar.MINUTE,00); 
     calendar.set(Calendar.SECOND, 00); 


     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pi); 

     Log.i("alarme", "alarme agendado as "+ new Date().toString()); 

    } 
} 
+0

「作成した後に期待した...」 - 正確に「PendingIntent」を作成していますか?また、なぜアラームが存在しない場合にのみ設定しようとしていますか? –

+0

@MikeM。このメソッドはMainControlのonCreateで呼び出されます –

+0

しかし、あなたはそこに 'PendingIntent'を作成していません。 –

答えて

0

あなたはフラグFLAG_NO_CREATEを使用している、それは

/** 
* Flag indicating that if the described PendingIntent does not 
* already exist, then simply return null instead of creating it. 
* For use with {@link #getActivity}, {@link #getBroadcast}, and 
* {@link #getService}. 
*/ 

は、あなたが使用する必要があると言うFLAG_CANCEL_CURRENTまたは基本的には現在保留中の意図をキャンセルし、現在保留中の意図がまだ存在する場合、余分なデータを置き換えFLAG_UPDATE_CURRENT、それぞれ、

+0

FLAG_NO_CREATEは、NULLが返っていなければ、存在すればインテントを返すはずであることを理解しました。いいえ? –

+0

だからすでに何も持っていなければ、それはヌルの返品を返すでしょう。 –

+0

はい、それはすでに存在します。それが問題です。 nullを返し続けます。 –

関連する問題