小编mco*_*pot的帖子

手机睡眠时Android AlarmManager无法正常工作

我遇到了AlarmManager的问题.

简而言之,我计划一个alarmManager:

Intent intent = new Intent(context, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delayInMs, pendingIntent);
Run Code Online (Sandbox Code Playgroud)

并且活动MyActivity在指定时间出现.就在插入设备时.当它放在我的口袋里,或延迟几分钟时,它也可以工作.但是当我在夜间设置alarmManager时,它将在早上无法工作.但是,只要我拿起电话或解锁屏幕,它就会起作用.

所以,我想这是由于设备的睡眠模式,但是如何解决这个问题呢?

1)我在myActivity的每个方法中添加了一个日志,我确信在手动唤醒设备之前没有人被调用.2)我尝试了PowerManagement的唤醒锁(在清单中使用了WAKE_LOCK权限),但没有改变:

alarmManager.setExact(.........);
wakeLock = ((PowerManager)contexte.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "MyActivity");
wakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

请帮忙 !我确定我太近了......

编辑Dec 04'16:感谢Nick Friskel和Vikram Rao,我改变了我的初始代码,调用了broadcastReceiver并在onReceive中获取了wakeLock.不幸的是,它似乎不起作用.当手机插上电源或35分钟后计划完警报时,它可以完美地工作,但是整晚都没有调用onReceive.那天晚上我尝试了闹钟,计划在上午9点发出警报,但onReceive仅在上午9:46执行,这意味着我解锁设备的那一刻.这是我的新代码:

Intent intent = new Intent("com.blah.something.ALARM_RECEIVED");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delayInMs, pendingIntent);
Run Code Online (Sandbox Code Playgroud)

也就是说,我的日志写作"onReceive的开头"并不是出于某种原因真正处于听众的开头.我只是设法把它放在真正的开头,所以我会看看是否有人听到了听众.

编辑Dec 05'16:所以,我在onReceive的顶部更改了日志写入,并且发生了同样的问题:一旦我手动唤醒设备,就会调用onReceive的开始.我可以实现wakefulBroadcastReceiver,但我担心它不会解决任何问题.如果我理解正确,wakefulBroadcastReceiver可以防止设备在onReceive和活动或服务的启动之间休眠.但是如果onReceive甚至没有被调用怎么办?我有点绝望......也许我应该直接问索尼.此外,我的手机有耐力模式,但它没有激活.

编辑12月11日16: 所以,随着更多测试,我现在确定我什么都不懂......我设置了一个每隔5分钟激活一次的broadcastReceiver(onReceive会在5分钟后重置alarmManager),我可以看到它的完美的工作...有时候.它可以持续几个小时,然后睡两个小时,然后再睡30分钟,然后再回到睡眠状态.(当我的手机开机,拔掉电源并闲置时).我将删除所有代码但我们感兴趣的是什么.它将更容易理解,我将能够在这里写下所有活动代码.

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.par.hasard.mysimpleapplication">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application …
Run Code Online (Sandbox Code Playgroud)

android sony alarmmanager wakelock sleep-mode

6
推荐指数
1
解决办法
8128
查看次数

标签 统计

alarmmanager ×1

android ×1

sleep-mode ×1

sony ×1

wakelock ×1