Sag*_*Low 7 android alarmmanager android-4.4-kitkat
我在我的代码中设置了警报,以便在特定时间内启动.
警报机制在SDK <19时运行良好,但在19日不会触发警报.
这是我设置闹钟的代码:
public void SetAlarm(Context context, Long executionTime)
{
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReciever.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Only one alarm can live, so cancel previous.
am.cancel(pi);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
am.set(AlarmManager.RTC_WAKEUP, executionTime, pi);
} else {
setAlarmFromKitkat(am, executionTime, pi);
}
}
Run Code Online (Sandbox Code Playgroud)
因为我使用Service我GetApplicationContext()用作上下文来设置闹钟.
该onReceive()代码:
@Override
public void onReceive(Context context, Intent intent) {
for (SchedulerListener listener : listeners) {
listener.fetchAndRebuildNotification();
}
}
Run Code Online (Sandbox Code Playgroud)
这是以下声明BroadcastReceiver:
<receiver
android:name="com.SagiL.myAppName.BroadCastReceivers.AlarmReciever" />
Run Code Online (Sandbox Code Playgroud)
回调在服务中运行一个方法(当警报应该触发时它仍处于活动状态,注意它不会启动它).
整个事情是library在我的应用程序中使用的,在那里我以相同的方式声明接收器.
有时警报会发射一次,但大多数情况下它根本不发射.
有没有人经历过这样的事情?
我不相信SDK 19很常见,因为许多应用程序正在使用AlarmManager,如果它很常见,它们也会破坏.
Ass*_*iel 10
我的申请遇到了类似的问题.我发现使用0广告id getBroadcast(...);并不能很好地工作并造成很多问题.
尝试将idfrom 0更改为警报的真实ID.
从:
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
至:
PendingIntent pi = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
这是一个迟到的答案,但可能有所帮助.在Android KitKat 4.4.xx中集成了电池管理器(我的设备:华为Ascend Mate 7).可以选择在电池管理器中杀死应用程序的后台进程和服务.不知道选项是否与德语选项类似,所以试试:
这听起来很简单,但这确实是我的问题.在带有ICS的三星Galaxy S3上,一切都像魅力一样.但是用Android 4.4.2买了一台新设备huawei,突然我的应用程序报警无法正常工作.检查系统后,我检测到该选项,启用了我的应用程序,现在一切正常.并非一切都是编程答案:).
自从做出这个答案以来,Android中发生了很多事情.对于每个有类似问题的人:自从更新到Marshmallow后,有两个问题:第一个是如上所述,第二个是打盹模式:
有些设备,比如我的华为Ascend Mate 7,采用了两种节能方式.因此,做上述内容还不够.此外,您必须将应用程序列入白名单并使用新alarmManager方法setAllowWhileIdle(),setExactAndAllowWhileIdle()并且setAlarmClock().
通过将应用程序列入白名单,您必须告诉用户.您可以在启动应用程序时使用简单信息来执行此操作,例如a AlertDialog和/或您可以使用它ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS intent来启动白名单屏幕.但请注意此操作,因为正如一些开发人员所报告的那样,Google可以暂停正在调用此操作的Playstore中的应用程序.
setAlarmClock也应该有效,但如果你这样做,闹钟图标就在上方.
我已经用新记录的打盹模式进行了一些测试,并发现它通常有效.但是,如果没有白名单,应用程序将进入待机状态并且'alarmManager'不会再触发,也不会使用新方法.我测试了一晚,应用程序在大约一小时内发送到待机状态.在白天的正常情况下,用户处于活动状态并且经常移动他的设备,它在没有白名单的情况下工作.
| 归档时间: |
|
| 查看次数: |
5895 次 |
| 最近记录: |