我正在创建一个使用 PendingIntent 和 AlarmManager 进行通知的应用程序。因此,就像每隔 12 小时一样,应用程序应该连接到网络服务器并检索一些信息(如果有)。当我用 1 分钟的延迟测试这段代码时,它运行得很好。但现在在发布我的应用程序之前,我想测试此代码并看看我的用户会得到什么,但我现在面临一个问题。
我在两台设备上进行了测试。其中一个进入休眠状态(闲置 7 小时),并且该设备没有收到任何通知。第二台设备确实收到了通知,但它被迫不 sleep (我为此使用了应用程序)。好吧,我只是假设就是这样,因为没有其他解释。因为我用的是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”,仅当您更改设置时才取消警报。所以不是这样的。
这个实现是否正确,它应该启动我的广播接收器,或者..?
最佳答案
使用以下代码,
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" />
关于java - AlarmManager 在某些设备上不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284695/