AlarmManager不会在某些设备上触发?

时间:2013-11-29 11:26:54

标签: java android alarmmanager

我正在创建一个使用PendingIntent和AlarmManager进行通知的应用程序。因此,每12个小时,应用程序应连接到Web服务器并检索一些信息(如果有的话)。当我用1分钟的延迟测试这段代码时,它运行得很好。但是在发布我的应用程序之前,我想测试这个代码,看看我的用户会得到什么,但我现在面临一个问题。

我在两台设备上测试过。一个人进入睡眠状态(闲置7小时),此设备未收到任何通知。第二个设备确实收到通知,但它被迫不要睡觉(我使用了app)。好吧,我只是假设这就是它,因为没有其他解释。因为我使用了AlarmManager。这是我的简要代码。

 public void setAlarm(boolean isCanceled) {

        Intent intent = new Intent(NOTIFICATION_TIME);



        if(!isCanceled) {


            pendingIntent = PendingIntent.getBroadcast(activityContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+TWELVEHOURS, TWELVEHOURS, pendingIntent);

        } else {

            pendingIntent = PendingIntent.getBroadcast(activityContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        }
    }

“isCanceled”,仅在您更改设置时取消闹钟。所以这不是它。

这是否正确实施,它应该启动我的广播接收器,还是......?

1 个答案:

答案 0 :(得分:1)

使用以下代码

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
    wl.acquire();

这将唤醒您的CPU,然后执行警报触发时要执行的代码。

您需要在AndroidManifest.xml文件中设置以下权限

<uses-permission android:name="android.permission.WAKE_LOCK" />