Administrador de alarmas programado no funciona Android
Estoy tratando de iniciar un servicio de alarma que se repite todos los días en un momento determinado. He pasado por un montón de hilos en el desbordamiento de la pila con respecto a esto, pero no hay suerte. He seguido algunos tutoriales: http://karanbalkar.com/2013/07/tutorial-41-using-alarmmanager-and-broadcastreceiver-in-android/ y http://javatechig.com/android/repeat-alarm-example en androide
Mi servicio nunca se inicia y no entiendo por qué. A continuación se muestra mi código:
- PACKAGE_REMOVED y luego PACKAGE_ADDED se disparan junto con PACKAGE_REPLACED Intent Action
- ¿Por qué BroadcastReceiver funciona incluso cuando la aplicación está en segundo plano?
- ¿Cómo puedo notificar una actividad en ejecución de un receptor de difusión?
- Receptor de difusión para inserción en contactos
- Android: Activar y desbloquear el teléfono
Mi archivo de manifiesto:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> <application> <service android:name="com.paper.DownloadService" android:enabled="true"/> <receiver android:name="com.paper.MyReceiver" ></receiver> </application>
Mi clase de receptor:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context rcontext, Intent intent) { Log.e("Main Activity", "inside on receive of myreceiver"); Intent service1 = new Intent(rcontext, DownloadService.class); rcontext.startService(service1); } }
Mi clase de servicio:
public class DownloadService extends Service { @Override public void onCreate() { // TODO Auto-generated method stub Log.e("Download Service", "CREATED"); } @SuppressLint({ "SimpleDateFormat", "NewApi" }) @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.e("Download Service", "STARTED"); return START_NOT_STICKY; } }
Mi actividad principal (dentro del método Crear):
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 15); calendar.set(Calendar.MINUTE, 29); Intent myIntent = new Intent(this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent,0); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Aquí, estoy tratando de configurar mi alarma a las 3:29 pm todos los días, pero el servicio no se inicia en ese momento o en cualquier momento para el caso. Cualquier ayuda sería apreciada. ¡Gracias!
- AlertDialog de dentro de BroadcastReceiver ?? Se puede hacer?
- ¿Por qué no funciona LocalBroadcastManager en lugar de Context.registerReceiver?
- Detectar el compartidor utilizado para compartir contenido
- AlarmManager no siempre ejecuta BroadcastReceiver
- Cómo detectar el estado contestado o rechazado en la llamada saliente
- Iniciar IntentService de Actividad y actualizar Actividad cuando IntentService finaliza
- El receptor de difusión de Android no funciona
- Receptor de transmisión para comprobar la conexión a Internet en la aplicación Android
Esto es lo que hice para que funcionara:
1) Añadido <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
a mi archivo de manifiesto.
2) Cambio de código en mi actividad principal a:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, 3); calendar.set(Calendar.MINUTE, 29); calendar.set(Calendar.AM_PM, Calendar.PM); Intent myIntent = new Intent(this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent,0); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Espero que alguien encuentre esto útil!
- Biblioteca de verificación de licencias de Android cuando está fuera de línea
- setOnTouchListener no se llama en ViewFlipper