2013-11-15 3 views
1

Мне нужно вызвать два будильника. Первый срабатывает правильно, если только один сигнал тревоги. Если я включаю код для второго, сигналы тревоги перекрываются, и желаемая функциональность не достигается. Мой вопрос: нужны ли мне два приемника вещания, или я могу сделать это с одним? первого сигнала тревоги:Установка 2 аварийных сигналов одним приемником

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? 
     } 
    } 
} 

ответ

0

Как указано в андроида док.

Если на тот же IntentSender уже установлен будильник, он будет сначала отменен.

Я считаю, что вам нужно установить время по одному.

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 

} 

Попробуйте это. Я уверен, что это сработает.

+0

Я не знаю, но у этого есть серьезные серьезные синтаксические ошибки. Он не работает. – Adi

4

Это может быть достигнуто с помощью единого вещательного устройства, но с использованием ожидающих намерений с различными идентификаторами. Теперь вы отправляете несколько ожидающих намерений с одинаковым ID. Из-за этого они перекрываются. Что вам нужно сделать, это отправить другое ожидающее намерения с другим идентификатором.
Первое намерение

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

Второе намерение

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

Затем с помощью alarmManager, срабатывала эти отложенные намерения должны быть получены вашим BroadcastReceiver. Надеюсь, это поможет

+0

И как именно я запускаю эти ожидающие намерения? – Adi

Смежные вопросы