2013-03-29 23 views
3

我有一個AlarmManager設置一個警報:AlarmManager醒來活動從休眠但活動不合意關閉

Intent intent = new Intent(mContext, AwakeActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     PendingIntent pendingIntent = PendingIntent.getActivity(mContext, PENDING_INTENT_ID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(mContext.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + futureTime, pendingIntent); 

並如期報警工作。當鬧鈴響起時,我的AwakeActivity打開。這也按預期工作。在AwakeActivity我:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    // main 
    super.onCreate(savedInstanceState); 

    // inflate 
    setContentView(R.layout.awake); 

    Window window = this.getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); //relates to IInputConnectionWrapper issue - but not cause of instant close of app 
    window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
} 

這裏是我的清單定義:

<activity 
     android:name=".AwakeActivity" 
     android:label="@string/activityAwake" 
     android:configChanges="keyboardHidden|orientation" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:screenOrientation="portrait" 
     android:launchMode="singleInstance" 
     android:noHistory="true" 
    > 
    </activity> 

我遇到的問題是,當AwakeActivity啓動時,它不會繼續開放。它立即關閉。但是......只有手機處於睡眠模式,如果我離開屏幕並通過鬧鐘打開AwakeActivity,這一切纔會發生 - 一切正常。

另一個,但...是這發生在我的Droid X運行2.3.4而不是我的Galaxy Nexus 4.2.2。我一直在這裏呆了一段時間,感覺好像我做得很好。

我在這裏錯過了什麼?有任何想法嗎?

回答

3

我自己也遇到過類似的問題。在某些設備上,設備會醒來,在其他設備上,活動將關閉。你有沒有嘗試過使用WakeLock來查看是​​否發生了同樣的事情?

所以聲明一個全局激活鎖定變量:

PowerManager.WakeLock wakelock; 

在你onCreate方法做這樣的事情:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK 
       | PowerManager.ON_AFTER_RELEASE, "tag"); 
wakelock.acquire(); 

現在,你只需要鬆開激活鎖定,說在你的onPause方法:

@Override 
protected void onPause() { 
    super.onPause();  
    wakelock.release(); 
} 

此外,您還需要將其包含在清單文件中:

<uses-permission android:name="android.permission.WAKE_LOCK"/> 
+0

簡單修復,因爲它經常。剛到那裏可能會產生真正的痛苦。我簡單地添加了'<使用權限android:name =「android.permission.DISABLE_KEYGUARD」/>' – dak

+0

噢,很好。很高興你找到答案。 – joelreeves

+0

快速問題。你是否只需要包含此權限,或者是否使用代碼來解除密鑰管理? – joelreeves