我有一个警报列表,我把它放在第一个,当它发出警报时我放下了...... 这是有效的。 但是如果应用程序在后台有足够的时间,则警报不起作用。
我放入了清单:
<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 :(得分:0)
如果您的活动已在后台运行足够长时间,则可能已被系统杀死。您可以尝试使用Service和setForeground()来实现目标。
答案 1 :(得分:0)
你如何设置下一个闹钟?如果您通过服务进行此操作,则需要获取唤醒锁。
当手机处于睡眠状态并且您收到警报时,手机将仅在BroadcastReceiver处于onReceive()方法时保持唤醒状态,之后它再次入睡。因此无法保证您的“setNextAlarm”被调用。