Ho una piccola applicazione che può essere utilizzata per impostare promemoria per eventi futuri. L'app utilizza un AlarmManager per impostare il momento in cui l'utente deve essere ricordato. Quando l'allarme si attiva, un BroadcastReceiver lo registra e, a sua volta, avvia un servizio per avvisare l'utente tramite un brindisi e una notifica nella barra di stato.Extra non corretti ricevuti a tutti gli effetti ma il primo
Per visualizzare le informazioni corrette nella notifica e brindare, alcune informazioni aggiuntive vengono trasmesse insieme all'intenzione. La prima volta che viene registrato un promemoria, le informazioni ricevute da BroadcastReceiver e trasmesse al servizio sono corrette. Ma per ogni seguente promemoria (vale a dire ogni nuovo intento ricevuto dal BroadcastReceiver) questa informazione rimane la stessa anche quando l'informazione inviata è diversa.
Ad esempio, se la stringa "pippo" viene inserita come extra con il primo intento, "foo" viene estratto correttamente da BroadcastReceiver. Se "bar" viene inserito come extra nel secondo intent, "foo" viene ancora estratto da BroadcastReceiver.
Questo è il codice che registra l'allarme e passa l'intento (principale ui classe):
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);
L'OnReceive() - metodo della classe 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);
}
L'intento -filter nel manifest:
<receiver android:name=".AlertReceiver">
<intent-filter>
<action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" />
</intent-filter>
</receiver>
Sono stato bloccato con questo per qualche tempo ora, quindi l'aiuto è molto molto apprezzato!
eccellente, grazie! – aspartame