为了账号安全,请及时绑定邮箱和手机立即绑定

当Android 6.0在打ze模式下时,如何使Alarm Manager工作?

当Android 6.0在打ze模式下时,如何使Alarm Manager工作?

吃鸡游戏 2019-11-14 14:11:31
我是Google Play上两个闹钟应用的开发者。我试图让他们使用Android 6.0。但是,打Do模式使它不会响起。我将它们放在白名单上,我放置了一个前台通知图标,我不确定我还能做什么-在“打Do”模式下,“警报管理器”警报仍将被忽略。不过,“时钟”应用程序(这是Google Play而不是AOSP应用程序)有所不同。在“时钟”应用上启用警报后,“ adb deviceidle step”将始终显示为“ active”,而不会显示为“ idle”,“ idle_pending”或其他任何内容。Android是否在这里欺骗,又给自己的应用程序提供了更多功能。“拉一个苹果”?Google Play上的所有闹钟应用程序都会失效吗?这里有点担心,这些都是高质量的应用程序,每个应用程序都花费了一年的兼职开发时间,对我来说是巨大的收入来源。关于如何使它们工作的任何线索都将提供巨大帮助。设置AlarmManager的意图:        Intent intent = new Intent(context, ReceiverAlarm.class);        if (android.os.Build.VERSION.SDK_INT >= 16) {            intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);        }        amSender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); //FLAG_CANCEL_CURRENT seems to be required to prevent a bug where the intent doesn't fire after app reinstall in KitKat        am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);        am.set(AlarmManager.RTC_WAKEUP, scheduleToTime+1, amSender);和ReceiverAlarm类:public class ReceiverAlarm extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {    if (wakeLock == null) {        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);        wakeLock.acquire();    }    X.alarmMaster.startRingingAlarm(true);}以及X.alarmMaster.startRingingAlarm()方法的相关部分:    if (wakeLock == null) {        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Theme.appTitle);        wakeLock.acquire();    }    if (screenWakeLock == null) {        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);        screenWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, Theme.appTitle+" scr");        screenWakeLock.acquire();    }某些方法已内联粘贴以便于阅读。
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

将应用程序放入白名单仅允许网络处于打ze模式。AlarmManager不受白名单影响。


对于setExactAndAllowWhileIdle()方法,请从SDK中检查以下说明。它不会将手机从打ze中唤醒。


发出警报后,该应用程序还将被添加到系统的临时白名单中大约10秒钟,以使该应用程序获得更多唤醒锁以完成其工作。


查看完整回答
反对 回复 2019-11-14
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

从我使用Developer Preview 3以及setExactAndAllowWhileIdle()setAndAllowWhileIdle()方法的测试中,这些警报在空闲状态下触发,持续大约10秒钟的网络连接。此外,它们可能至少相隔15分钟。但是,在此期间,从技术上讲,电话永远不会退出空闲模式。setAlarmClock()似乎会将整个手机从空闲模式唤醒,并允许更长的唤醒锁。

查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信