2013-07-24 2 views
0

У меня есть список тревог, я поставил первый, и когда звучит сигнал тревоги, я ставлю следующий .... Это работает. Но если приложение находится в фоновом режиме достаточно, сигналы тревоги не работают.AlarmManager в фоновом режиме

Я положил в манифесте:

<receiver android:name=".Alertas_Broadcast" > 
     <intent-filter> 
      <action android:name="com.pack.pack.Alertas" /> 

      <category android:name="com.pack.pack" /> 
     </intent-filter> 
    </receiver> 

И вещания и функции, которые ставят новую тревогу:

public class Alertas_Broadcast extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 

    String mensaje = ""; 
    if (extras != null) 
     mensaje = extras.getString("mensaje"); 

    if (!mensaje.equals("")){ 
     Utilidades.generateNotification(context, mensaje, Main.class, null); 
     // I put the next alarm calling setNextAlarm with the new parameters 
    } 
} 
} 

public void setNextAlarm (long milisegundos, String mensaje){ 
    Bundle extras = new Bundle(); 
    extras.putString("mensaje", mensaje); 
    Intent i = new Intent("com.pack.pack.Alertas"); 
    i.putExtras(extras); 

    PendingIntent pintent = PendingIntent.getBroadcast(InfoApp.miContexto, (int) milisegundos, i, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarm = (AlarmManager)InfoApp.miContexto.getSystemService(Context.ALARM_SERVICE); 

    if (milisegundos != 0){ 
     alarm.setRepeating(AlarmManager.RTC_WAKEUP, milisegundos, 99999999, pintent); 
    } 
    else{ 
     alarm.cancel(pintent); 
    } 
} 

Где проблема? Я предполагаю, что проблема заключается в действии получателя, но я не знаю, как это решить. Я читал, что это не очень хорошая идея, чтобы все время слушалось служение, так как многие ресурсы были потрачены.

Извините за мой английский и благодарю вас!

ответ

0

Если ваша деятельность была в фоновом режиме достаточно долго, возможно, она была убита системой. Вы можете попробовать использовать Сервис и setForeground() для достижения своей цели.

0

Как вы устанавливаете следующий сигнал тревоги? Если вы делаете это через услугу, вам нужно приобрести wakelock.

Когда телефон находится в состоянии ожидания и вы получаете сигнал тревоги, телефон будет бодрствовать, пока BroadcastReceiver не будет включен в метод onReceive(), после чего он снова заснет. Таким образом, нет никакой гарантии, что ваш «setNextAlarm» вызывается.

+0

Я ищу следующую дату в базе данных, и я вызываю setNextAlarm с новыми параметрами. У меня тоже есть разрешение WAKE_LOCK в манифесте, но у меня нет службы – user1852854

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