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

标签 java android alarmmanager

我正在创建一个使用 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/

相关文章:

java - Spring 不显示 home.html

java - 我可以将 return 语句放在 switch 语句中吗?

java - Netbeans 8.2 错误的编辑器文本

Fragment 中的 Android 选项卡布局

java - AlarmManager 在 Android 中不工作

android - 使用 AlarmManager 每天发送 Intent?

java - 在 Android 上解压缩大文件

android - 错误的 Intent 被使用

java - 如何使用 Eclipse 在 Android 中实现/链接 Run Keeper API?

android - 通过 calendar.getTimeInMillis() 设置时,AlarmManager 不会关闭