如何使用相同的接收机类和相同的功能设置多个闹钟?

问题描述:

我想运行两个闹钟来显示通知一个是每天一个我每小时在一个相同的接收器类和使用相同的功能,但问题是,当我分配一个另一个得到分配后我重新启动我的设备,因为因为的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(); 

       } 

我怎么能使用相同的报警接收器类实现这个并使用功能?谢谢。

你需要使你的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独特。