Активность, отображаемая даже в заблокированном режиме - PullRequest
3 голосов
/ 04 марта 2012

Мой вопрос похож на этот Как я могу разбудить устройство Android и пропустить блокировку экрана

Я хочу отобразить диалоговое окно из приемника вещания, но Android API непозволяя мне сделать это, поэтому я использую запуск действия оттуда и меняю тему этого действия на Тему.

Теперь я хочу, чтобы это действие отображалось, даже когда телефон находится в заблокированном режиме / в спящем режиме.

Экран Я могу включить бу, используя флажки ниже, но Key Guard (Non Secured) Мне нужно разблокировать вручную.Я не могу видеть мое окно на заблокированном экране.

Разница в том, что я не использую полноэкранное действие, т.е.

android:theme="@android:style/Theme.Dialog

в своем коде, который я использую

Window w = getWindow();
w.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
           WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
           WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

1 Ответ

14 голосов
/ 04 марта 2012

Мне не удалось реализовать эту функцию с помощью этих флагов, но мне удалось с помощью WakeLock и KeyguardLock .Вот что я делаю:

public class DismissLock extends Activity {

PowerManager pm;
WakeLock wl;
KeyguardManager km;
KeyguardLock kl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Log.i("INFO", "onCreate() in DismissLock");
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    km=(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    kl=km.newKeyguardLock("INFO");
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.ON_AFTER_RELEASE, "INFO");
    wl.acquire(); //wake up the screen
    kl.disableKeyguard();// dismiss the keyguard

    setContentView(R.layout.main);

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    wl.release(); //when the activiy pauses, we should realse the wakelock
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    wl.acquire();//must call this!
}

}

Конечно, вам все равно нужно объявить разрешение в файле манифеста.

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