tengo una pequeña aplicación que puede ser utilizada para establecer recordatorios para eventos futuros. La aplicación utiliza un AlarmManager para establecer el momento en que se debe recordar al usuario. Cuando la alarma se apaga, un BroadcastReceiver registra esto y, a su vez, inicia un servicio para notificar al usuario mediante un brindis y una notificación en la barra de estado.extras incorrecta recibida con todos los intentos pero el primero
Con el fin de mostrar la información correcta en la notificación y tostadas, alguna información extra se pasa junto con el intento. La primera vez que se registra un recordatorio, la información recibida por BroadcastReceiver y transferida al servicio es correcta. Pero para cada recordatorio siguiente (es decir, cada nuevo intento recibido por BroadcastReceiver) esta información permanece igual incluso cuando la información enviada es diferente.
A modo de ejemplo, si la cadena "foo" se pone como un extra con el primer intento, "foo" se extrae correctamente por el BroadcastReceiver. Si "bar" se coloca como un extra en el segundo intento, "Broadcast Receiver" sigue extrayendo "foo".
Este es el código que se registra la alarma y pasa la intención (principal de clase ui):
Intent intent = new Intent(ACTION_SET_ALARM);
intent.putExtra("desc", desc);
intent.putExtra("time", time);
intent.putExtra("dbId", dbId);
intent.putExtra("millis", millis);
PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, millis, pIntent);
El OnReceive() - método en la clase BroadcastReceiver:
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AlertService.class);
String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc");
String time = intent.getStringExtra("time");
long dbId = intent.getLongExtra("dbId", -1);
long millis = intent.getLongExtra("millis", -1);
i.putExtra("desc", desc);
i.putExtra("time", time);
i.putExtra("dbId", dbId);
i.putExtra("millis", millis);
Log.d(TAG, "AlertReceiver: " + desc + ", " + time + ", " + dbId + ", " + millis);
Toast.makeText(context, "Reminder: " + desc, Toast.LENGTH_LONG).show();
context.startService(i);
}
La intención -filtro en el manifiesto:
<receiver android:name=".AlertReceiver">
<intent-filter>
<action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" />
</intent-filter>
</receiver>
He estado atascado con esto desde hace un tiempo, así que ayuda es muy ¡muy apreciado!
excelente, gracias! – aspartame