Android AlarmManager no despertar teléfono hasta

Quiero que se muestre una actividad en un momento determinado. Para esto, estoy usando AlarmManager. Funciona bien cuando el dispositivo está despierto, pero no lo despierta si está dormido.

Mi código para configurar la alarma:

Calendar alarmTime = Calendar.getInstance(); alarmTime.set(Calendar.HOUR_OF_DAY, alarm.hour); alarmTime.set(Calendar.MINUTE, alarm.minute); alarmTime.set(Calendar.SECOND, 0); if (alarmTime.before(now)) alarmTime.add(Calendar.DAY_OF_MONTH, 1); Intent intent = new Intent(ctxt, AlarmReceiver.class); intent.putExtra("alarm", alarm); PendingIntent sender = PendingIntent.getBroadcast(ctxt, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT); alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), sender); 

Mi receptor de difusión:

 @Override public void onReceive(Context context, Intent intent) { try { Bundle bundle = intent.getExtras(); final Alarm alarm = (Alarm) bundle.getSerializable("alarm"); Intent newIntent; if (alarm.type.equals("regular")) { newIntent = new Intent(context, RegularAlarmActivity.class); } else if (alarm.type.equals("password")) { newIntent = new Intent(context, PasswordAlarmActivity.class); } else if (alarm.type.equals("movement")) { newIntent = new Intent(context, MovementAlarmActivity.class); } else { throw new Exception("Unknown alarm type"); } newIntent.putExtra("alarm", alarm); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(newIntent); } catch (Exception e) { Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show(); Log.e("AlarmReceiver", Log.getStackTraceString(e)); } } 

Este código no activa el dispositivo. Sin embargo, cuando lo vuelvo a activar, se muestran. Necesito hacer que enciendan la pantalla. ¿Puedes ayudarme con este problema?

Tuve un problema similar y la solución fue usar WakeLocker. Eso debe hacerse (preferiblemente como la primera cosa en el receptor), o el dispositivo se despertará cuando se recibe la alarma, pero se quedará dormido de nuevo antes de context.startActivity(newIntent) ; se llama. (También he observado el comportamiento cuando eso no sucede, por lo que parece ser un poco arbitrario) Así que la respuesta fácil y rápida: Hacer una nueva clase llamada WakeLocker con este código fuente:

 package mypackage.test; import android.content.Context; import android.os.PowerManager; public abstract class WakeLocker { private static PowerManager.WakeLock wakeLock; public static void acquire(Context ctx) { if (wakeLock != null) wakeLock.release(); PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, MainActivity.APP_TAG); wakeLock.acquire(); } public static void release() { if (wakeLock != null) wakeLock.release(); wakeLock = null; } } 

Y en su llamada del receptor WakeLocker.acquire(context); Como la primera cosa. Extra: también sería WakeLocker.release(); llamar a WakeLocker.release(); Una vez que su alarma ha hecho su cosa.

Lo más probable es que la alarma esté despertando el dispositivo. Sin embargo, AlarmManager emisiones de AlarmManager no encienden la pantalla y es posible que el dispositivo vuelva a dormirse antes de que se inicie la actividad.

Usted necesitará adquirir un WakeLock en onReceive() antes de llamar a startActivity() , y lanzar ese WakeLock después de que el usuario responda a su actividad.

Para servicios (quizás también funciona para la actividad), extienda su AlarmReceiver de WakefulBroadcastReceiver , adquiere WAKE_LOCK para usted mientras se procesa la intención.

WakefulBroadcastReceiverhttps://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

Mantener la guía del dispositivo despierto – https://developer.android.com/training/scheduling/wakelock.html

  • Aclaración del comportamiento de AlarmManager en Android
  • Cómo permitir que el teléfono funcione mientras usa la alarma RTC en Android
  • Cómo configurar múltiples alarmas usando el administrador de alarmas de android
  • Android alarmManager setRepetición no desencadenar
  • Notificación de incendio cada 24 horas ya la hora exacta de 8 AM
  • Compruebe el tiempo de PendingIntent existente en AlarmManager
  • AlarmManager setExact con WakefulBroadcastReceiver a veces no es exacto
  • AlarmManager no funciona
  • ¿Hay alguna forma de comprobar si ya está configurada una alarma?
  • ¿Cómo configurar una alarma de repetición exacta en API 19 (kitkat)?
  • AlarmManager borrar todos los horarios en el apagado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.