FLAG_TURN_SCREEN_ON no siempre funciona
Inicie una actividad de un BroadcastReceiver, que es activado por un alaram (tipo RTC_WAKEUP). En onCreate de esa actividad añado estas banderas
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
Problema es que a veces (aproximadamente 10% de casos) la pantalla no se enciende. La alarma se activa correctamente (aquí se oye el sonido de una notificación, que también se enciende en el receptor onReceive), luego, si presiono el botón de encendido del teléfono, la pantalla se enciende, mostrando mi actividad y se apaga inmediatamente. Que, el botón de encendido funciona bien.Esto ocurre en Android 2.3.7 y aquí está el método onReceive ()
- Pantalla negra al volver a la actividad de reproducción de vídeo en Android
- ¿Cómo puedo tomar una captura de pantalla de una vista web, capturar la página completa?
- Definiciones de calificadores de múltiples pantallas de Android
- ¿Es posible configurar el fondo de pantalla tal como se hace con la aplicación que viene con Android?
- ¿Reduce Android la velocidad de descarga cuando se apaga la pantalla?
@Override public void onReceive(Context context, Intent intent) { m_Context = context; Bundle extras = intent.getExtras(); final int id = extras.getInt("timer_id"); Intent activityIntent = new Intent(m_Context, MyActivity.class); activityIntent.putExtra("timer_id", id); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); m_Context.startActivity(activityIntent); // and now load the alarm sound and play it for the desired time showFinishedNotification(); }
Me gustaría evitar usar PowerManager, ya que necesita un permiso, y las banderas son la forma preferida.
Lo que podría ser un problema? Logcat no muestra ningún problema …
- Mantenga la pantalla despierta durante toda mi actividad
- Android WallpaperManager cosecha la imagen
- ¿Cómo obtener la densidad de una pantalla?
- Orientación de la pantalla y valores en manifest.xml
- Cómo crear una pantalla deslizante (como en Tweetdeck) en Android?
- Cómo saber si el usuario está en la pantalla de bloqueo desde el servicio
- Android y el soporte de múltiples diseños de pantallas
- Activación de la pantalla mediante programación
Estoy un poco tarde para la fiesta aquí, pero he estado luchando esto por un tiempo y ahora finalmente encontró una manera de obtener la pantalla para desbloquear cada vez. Añado los indicadores en el evento onAttachToWindow (). Normalmente lo hago desde un WakefulBroadcastReceiver para que la pantalla transiciones sin problemas, pero que es caso de uso dependiente.
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); //Screen On getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } private void clearFlags() { //Don't forget to clear the flags at some point in time. getWindow().clearFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); }
De mi experiencia e investigación sobre este tema:
-
El FLAG_TURN_SCREEN_ON no se puede utilizar para activar y desactivar la pantalla varias veces en su aplicación.
-
El FLAG_TURN_SCREEN_ON sólo se puede utilizar una vez para activar la pantalla cuando se crea una nueva actividad (preferiblemente en el método onCreate ()) o cuando se vuelve a crear una vista .
Ahora, puede evitar esta limitación mediante:
- Iniciar una nueva actividad y establecer la bandera allí, luego finalizar la actividad (por el usuario o mediante programación) para que la pantalla se apague.
- Ajustando los parámetros params.screenBrightness a "dim" como sea posible , a veces la pantalla "aparece OFF". A continuación, puede aumentar el brillo para "encender" la pantalla. Sin embargo, esto a menudo no funciona ya que la pantalla sigue siendo tenue pero visible, también esto no funciona si el usuario bloquea el teléfono.
- Uso de Power Manager Wakelock (esto todavía funciona, pero Android desprecia esta funcionalidad, por lo que están desalentando el uso de esta técnica). Sin embargo, por lo que puedo decir esto es la única manera que puedo conseguir mi aplicación para encender / apagar la pantalla de forma fiable.
Ninguno de estos son ideales (de hecho, se sienten como hacks), sino simplemente utilizar el que mejor se adapte a sus necesidades de aplicación.
Puede leer más aquí:
- Código fuente del despertador Android
- Código fuente del reloj de escritorio de Android
- Atenuación de la pantalla para que aparezca OFF / ON
- Uso de un wakelock para mantener la pantalla encendida / apagada
- Despertar el dispositivo y activar la pantalla en múltiples opciones
Problema es que a veces (aproximadamente 10% de casos) la pantalla no se enciende
Si tuviera que adivinar, el dispositivo se está quedando dormido antes de que la actividad se inicie. Una vez que onReceive()
devuelve, el dispositivo puede y volverá a dormirse, y pasará algún tiempo después de que onReceive()
regrese antes de que su actividad se inicie.
Este mismo escenario, pero reemplazando startActivity()
con startService()
, es por eso que tuve que escribir WakefulIntentService
, que utiliza un WakeLock
para asegurar que el dispositivo permanezca despierto el tiempo suficiente para que haga su trabajo, luego libera el WakeLock
.
- Android Parcelable en Kotlin: CREATOR no se encuentra en la clase de datos Parcelable
- Problemas al habilitar GoogleApiClient en AppCompatActivity