繁体   English   中英

AlarmManager在某些设备上无法启动?

[英]AlarmManager does not fire on some devices?

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

我已经在两种设备上进行了测试。 一个人进入睡眠状态(闲置7个小时),并且该设备未收到任何通知。 第二个设备确实收到了通知,但是被迫不睡觉(我为此使用了应用程序)。 我只是假设是这样,因为没有其他解释。 因为我使用了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" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM