簡體   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