我正在创建一个使用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”,仅在您更改设置时取消闹钟。所以这不是它。
这是否正确实施,它应该启动我的广播接收器,还是......?
答案 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" />