0

我有一个警报列表,我放了第一个,当它响起警报时,我放了下一个......这是有效的。但如果应用程序在后台运行的时间足够长,警报就不起作用。

我在清单中输入:

<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);
    }
}

问题出在哪里?我想问题是接收者的行为,但我不知道如何解决。我读到让服务一直在监听并不是一个好主意,因为会花费很多资源。

对不起我的英语,谢谢!

4

2 回答 2

0

如果您的 Activity 在后台运行的时间足够长,它可能已被系统杀死。您可以尝试使用 Service 和 setForeground() 来实现您的目标。

于 2013-07-24T10:33:08.967 回答
0

你如何设置下一个闹钟?如果您是通过服务执行此操作,则需要获取唤醒锁。

当手机处于睡眠状态并且您收到警报时,手机只会在 BroadcastReceiver 处于 onReceive() 方法时保持唤醒状态,然后再次进入睡眠状态。所以不能保证你的“setNextAlarm”被调用。

于 2013-07-24T11:10:36.310 回答