android wakeup

Wake Android Device up



wakeup (6)

Oye, necesito despertar mi dispositivo Android dormido en un momento determinado. ¿Alguna sugerencia?

PS Wake up: enciende la pantalla y quizás desbloquee el teléfono


Encontré una manera y no es tan complejo ... funciona en cualquier versión de API.

Necesita utilizar el método PowerManager.userActivity(l, false) y registrar su actividad como difusión recibida por SCREEN_OFF intento:

En su actividad, OnCreate puso algo como:

mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.v(TAG, "Screen OFF onReceive()"); screenOFFHandler.sendEmptyMessageDelayed(0, 2000L); } };

Lanzará el controlador después de 2 segundos de evento de Apagado.

Registre el receptor en su método onResume ():

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(mReceiver, filter); Log.i(TAG, "broadcast receiver registered!");

Crea un controlador como el siguiente:

private Handler screenOFFHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // do something // wake up phone Log.i(TAG, "ake up the phone and disable keyguard"); PowerManager powerManager = (PowerManager) YourActivityName.this .getSystemService(Context.POWER_SERVICE); long l = SystemClock.uptimeMillis(); powerManager.userActivity(l, false);//false will bring the screen back as bright as it was, true - will dim it } };

Solicitar permiso en su archivo de manifiesto:

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

No olvides anular el registro del receptor de transmisión cuando hayas terminado. Puede hacer eso en onDestroy () por ejemplo (lo cual no está garantizado)

unregisterReceiver(mReceiver); Log.i(TAG, "broadcast UNregistred!");


Establecer una alarma programáticamente despertará el teléfono (reproducirá un sonido) y supongo que la pantalla de encendido sería una opción allí.

No creo que haya una API expuesta que desbloqueará el teléfono automáticamente.


Lo mejor es usar una combinación adecuada de estos indicadores de ventana:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_TURN_SCREEN_ON

Si desea ejecutar en versiones anteriores de la plataforma que no son compatibles con la (s) bandera (s) deseada (s), puede usar directamente bloqueos de activación y bloqueos de bloqueo de teclas ... pero esa ruta está llena de peligros.

UNA NOTA IMPORTANTE : su actividad debe ser de pantalla completa para que funcione la combinación de indicadores anterior. En mi aplicación intenté usar estos indicadores con una actividad que no es de pantalla completa (Dialog Theme) y no funcionó. Después de mirar la documentación encontré que estas banderas requieren que la ventana sea una ventana de pantalla completa.


Para despertar la pantalla:

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG"); wakeLock.acquire();

Para liberar el bloqueo de pantalla:

KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG"); keyguardLock.disableKeyguard();

Y el manifiesto debe contener:

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

Para obtener más detalles sobre PowerManager, consulte la documentación de la API: http://developer.android.com/reference/android/os/PowerManager.html

EDITAR: esta respuesta se informa como obsoleta.


Si muestra una ventana al despertarse, puede hacerlo funcionar fácilmente agregando algunas banderas a su actividad, sin usar un bloqueo de activación.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); }


getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);

desactivará el bloqueo de teclas general y hará que el dispositivo se desbloquee.