用一个接收器设置2个报警

时间:2013-11-15 14:07:22

标签: android broadcastreceiver alarm

我需要触发两个警报。如果只有一个警报,第一个正确触发。如果我包含第二个代码,警报会重叠并且无法实现所需的功能。我的问题是我需要两个广播接收器,还是我可以用一个? 第一次警报:

    public void triggerEnable(boolean enableData, int hourInDay, int minInDay) {
    Calendar calendar = Calendar.getInstance();
    //if (enableData) {
        calendar.set(Calendar.HOUR_OF_DAY, hourInDay);
        calendar.set(Calendar.MINUTE, minInDay);
 //     } else {
 //         calendar.set(Calendar.HOUR_OF_DAY, hourInDay);
//          calendar.set(Calendar.MINUTE, minInDay);
//      }
    calendar.set(Calendar.SECOND, 0);
    Intent broadcastIntent = new Intent("com.sang.mobiledata.IntentAction.RECEIVE_CONN_UPDATE");
    broadcastIntent.putExtra("FLAG_KEY", enableData);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);

}

广播接收器:

    @Override
 public void onReceive(Context context, Intent intent) {
    if(CONN_ACTION.equals(intent.getAction())) {
        boolean enableConn = intent.getBooleanExtra("FLAG_KEY", false);
           objNetwork.setMobileDataEnabled(context, enableConn); 
        //what do I do here to have different values for the second alarm?
      }
    }
}

3 个答案:

答案 0 :(得分:4)

这可以通过使用单个广播接收器但使用具有不同ID的待定意图来实现。 现在你正在做的是发送多个具有相同ID的待处理意图。因此,它们是重叠的。您需要做的是发送另一个具有不同ID的待处理意图 第一意图

     PendingIntent pi = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);

第二意图

PendingIntent pi = PendingIntent.getBroadcast(this, 1, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);

然后在alarmManager的帮助下,触发广播接收者接收的待处理意图。 希望它有所帮助

答案 1 :(得分:0)

在Android doc。中说明。

如果已经为同一个IntentSender安排了警报,它将首先被取消。

我相信你需要逐个设定时间。

答案 2 :(得分:0)

您必须创建两个待处理的意图。

Intent alarm1 = new Intent("com.sang.mobiledata.IntentAction.RECEIVE_CONN_UPDATE");
    broadcastIntent.putExtra("FLAG_KEY", enableData);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, alarm1 , PendingIntent.FLAG_UPDATE_CURRENT);

Intent alaram2 = new Intent("com.sang.mobiledata.IntentAction.RECEIVE_CONN_UPDATE");
    broadcastIntent.putExtra("FLAG_KEY", enableData);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, alaram2 , PendingIntent.FLAG_UPDATE_CURRENT);

然后你必须注册两个广播接收器。

private static BroadcastReceiver alarm1= null;
private static BroadcastReceiver alaram2= null;

 alarm1= new BroadcastReceiver() {
         @Override
         public void onReceive(Context arg0, Intent arg1) {
        if(CONN_ACTION.equals(intent.getAction())) {
        boolean enableConn = intent.getBooleanExtra("FLAG_KEY", false);
        objNetwork.setMobileDataEnabled(context, enableConn); 

      }

}

alaram2=new BroadcastReceiver(){
         @Override
         public void onReceive(Context arg0, Intent arg1) {
//put your code for the second alarm here

}

试试这个。我相信这会奏效。