2017-01-03 43 views
2

我遇到了AlarmManager的問題。我能夠設置報警,此代碼AlarmManager在特定時間內不會觸發

private void setAlarm(long when) { 
    Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
    intent.putExtra("ID", note.getId()); 
    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
    Toast.makeText(getApplicationContext(),"Reminder set up", Toast.LENGTH_SHORT).show(); 
} 

此代碼工作得很好,如果我設置long when = 5 * 1000; \\For example 5secs later,但如果我用

Calendar calendar = Calendar.getInstance(); 
        calendar.setTime(date); 
        long selectedDate = date.getTime(); 
        long timeSince1970 = System.currentTimeMillis(); 
        long timeForAlarm = selectedDate - timeSince1970; 

        Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
        intent.putExtra("ID", note.getId()); 
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
        Toast.makeText(getApplicationContext(),"Reminder set for "+calendar.getTime().toString(), Toast.LENGTH_SHORT).show(); 

我報警triggerd 2secs後來此代碼。我做錯了什麼? :/ 我試過AlarmManager.ELAPSED_REALTIME_WAKEUPAlarmManager.RTC_WAKEUP,但沒有任何變化。

請不要檢查我的問題重複。我沒有找到可以解決我的問題的方法。

+1

(提示:告訴社會不收東西爲重複的,如果它是一個真正的副本將不會改變任何東西在它最多隻能幫助它針對性更強。): - \ –

+0

@JonAdams的確如此。哈哈 –

回答

3

假設你是Android Studio中工作(如果沒有 - 你必須切換),點擊F1,而你的文本指針是set方法和閱讀的AlarmManager::set描述。

注:API 19年初,傳遞給此方法觸發時間是 爲不精確處理:報警不會在此時間之前送達, 但可以推遲和以後一段時間作出。操作系統將使用此策略,以便在整個系統中「批量」報警,最大限度地減少設備「喚醒」的次數,並最大限度地減少電池的使用。一般而言,與未來計劃中的警報不會被延遲,只要計劃在將來 附近的警報不會延遲。

+0

那麼,有沒有辦法安排我的鬧鐘?我應該使用權限set_alarm或類似的東西? –

+0

男人,我已經給你一個鏈接,並說如何在AS中使用文檔。只有你需要做的是閱讀。這裏是從doc複製過來的:'如果你的應用程序有很強的排序要求,那麼你可以使用其他API來獲得必要的行爲;看到setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。' – Divers

0

而是裝置使用setExact

manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

沒有工作:/ Stil同樣的問題。 2秒後觸發報警。 –