0

私は毎日の通知と同じレシーバクラスの1時間ごとの通知を表示するために2つのアラームを実行しようとしていますが、同じ機能を使用していますが、私はデバイスを再起動した後、 BOOT_COMPLETEDの、私はこれを達成することができる方法があることを知りたいですか?同じ受信機クラスと同じ機能を使用して複数のアラームを設定するにはどうすればよいですか?

マイalarm_receiverクラス: -

public class alarmreceiver extends BroadcastReceiver { 
    static int id; 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show(); 

      start(context,id); 

    } 
    static void start(Context context,int id) { 
     if (id==1) { 
       Intent intent = new Intent(context, notification_receiver.class); 
       PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
         SystemClock.elapsedRealtime(), 60 * 1000 
         , pendingintent); 

     } else 
      if (id == 2) { 
       Intent intent = new Intent(context, notification_receiver.class); 
       PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.set(Calendar.HOUR, 10); 
       calendar.set(Calendar.MINUTE, 14); 
       calendar.set(Calendar.AM_PM, Calendar.PM); 
       alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingintent); 

      } 
    } 
    } 

私は、ボタンのクリックイベントの下で私のメインの活動でこの関数を呼び出しています: -

butn2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       if (r1.isChecked()) { 

        alarmreceiver.start(getApplicationContext(),2); 

        Toast.makeText(getApplicationContext(), "Daily Affirmations Scheduled", Toast.LENGTH_SHORT).show(); 
// 
       } 
       if(r2.isChecked()) 
       { 
        alarmreceiver.start(getApplicationContext(),1); 
        Toast.makeText(getApplicationContext(), "Hourly Affirmations Scheduled", Toast.LENGTH_SHORT).show(); 

       } 

どのように私は、同じ警報受信機のクラスを使用することによって、これを達成することができます関数を使用していますか?ありがとう。

答えて

0

あなたはPendingIntentをユニークにする必要があります。現時点では、PendingIntent.getBroadcast()への両方の電話は同じPendingIntentを返します。これに

PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

:この

変更

PendingIntent pendingintent = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

idパラメータの提供はPendingIntentが一意になります。

関連する問題