2014-03-27 82 views
3

設備未插入線進行充電 設備被設置閒置15秒後進入睡眠AlarmManager.RTC運行,即使設備處於睡眠

怪異的結果是,振動器保持運行每60秒當我設置我到60 這裏是我的報警代碼。

public void startAlert(View view) { 
     EditText text = (EditText) findViewById(R.id.time); 
     int i = Integer.parseInt(text.getText().toString()); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(
       this.getApplicationContext(), 234324243, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), i*1000, pendingIntent); 

     Toast.makeText(this, "Alarm set in " + i + " seconds", 
       Toast.LENGTH_LONG).show(); 
    } 

的廣播接收器

public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Time is up!!!!.", 
       Toast.LENGTH_LONG).show(); 
     // Vibrate the mobile phone 
     Vibrator vibrator = (Vibrator) context 
       .getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(1000); 
    } 

回答

5

你是混亂的 「睡眠」 與屏幕關閉。您無法告訴設備何時進入深度睡眠模式。

只要處理器處於活動狀態,RTC就可以工作。如果設備進入睡眠狀態(10-30分鐘不活動後,取決於設備),您需要RTC_WAKEUP

因此,對於您的情況,您可能想要在屏幕關閉時取消鬧鐘。 有關更多信息,請參閱How can I tell if the screen is on in android?

更新

試試看:播放一些音樂,並等待15秒。它會停止嗎?沒有 - >設備沒有睡覺。

由於系統決定,您不能設置設備進入睡眠狀態的時間。它實際上是「顯示睡眠」。 想象一下,您正在從Play商店下載一個apk。下載是否應該在X秒後告訴設備「休眠」?當然不是。

菜單中的設置稱爲「睡眠」,因爲普通用戶瞭解它。該設置可通過Settings.System.putInt(contentResolver, Settings.System.SCREEN_OFF_TIMEOUT, <int>)訪問。

+0

設備在設置菜單中處於非活動狀態15秒後設置爲休眠。你的意思是這不會讓設備進入睡眠狀態?請提供指向支持此聲明的任何文檔的鏈接 – anuj

+0

@anuj我沒有doc鏈接,它的正確體驗。我擁有的最好的答案是我的更新答案和PowerManager和WakeLock的文檔。 – Lovis

相關問題