Domanda

Finora e grazie a questo sito Web, sono stato in grado di configurare un allarme che sarà impostato e attivo, anche se mi svolto del mio telefono.

Ora, ho impostato un allarme per mostrare un promemoria per l'evento A e ho bisogno dell'applicazione per configurare un altro allarme per mostrare un altro promemoria per evento B.

Devo fare qualcosa di sbagliato, perché riporta solo il promemoria per l'evento A. Sembra che una volta configurato, qualsiasi altro allarme è inteso come lo stesso.: - (

Ecco il dettaglio di ciò che sto facendo in due passaggi:

1) Da un'attività ho impostato un allarme che in determinati ora e data chiamerà un ricevitore

                Intent intent = new Intent(Activity_Reminder.this,
                        AlarmReceiver_SetOnService.class);

                intent.putExtra("item_name", prescription
                        .getItemName());
                intent
                        .putExtra(
                                "message",
                                Activity_Reminder.this
                                        .getString(R.string.notif_text));
                intent.putExtra("item_id", itemId);
                intent.putExtra("activityToTrigg",
                        "com.companyName.appName.main.Activity_Reminder");

                PendingIntent mAlarmSender;

                mAlarmSender = PendingIntent.getBroadcast(
                        Activity_Reminder.this, 0, intent, 0);

                long alarmTime = dateMgmt.getTimeForAlarm(pickedDate);
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(alarmTime);
                // Schedule the alarm!
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000,
                        mAlarmSender);
.

2) Dal ricevitore chiamo un servizio

        Bundle bundle = intent.getExtras();
        String itemName = bundle.getString("item_name");
        String reminderOrAlarmMessage = bundle.getString("message");
        String activityToTrigg = bundle.getString("activityToTrigg");
        int itemId = Integer.parseInt(bundle.getString("item_id"));
        NotificationManager nm = (NotificationManager) context.getSystemService("notification");
        CharSequence text = itemName + " "+reminderOrAlarmMessage;
        Notification notification = new Notification(R.drawable.icon, text,
                System.currentTimeMillis());
        Intent newIntent = new Intent();
        newIntent.setAction(activityToTrigg);
        newIntent.putExtra("item_id", itemId);
        CharSequence text1= itemName + " "+reminderOrAlarmMessage;
        CharSequence text2= context.getString(R.string.notif_Go_To_Details);
        PendingIntent pIntent = PendingIntent.getActivity(context,0, newIntent, 0);
        notification.setLatestEventInfo(context, text1, text2, pIntent);
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        notification.defaults = Notification.DEFAULT_ALL;
        nm.notify(itemId, notification);
.

Grazie in anticipo,

Monn3t

È stato utile?

Soluzione

OK, quando si imposta un pendententente, dovresti assegnarlo un ID univoco ad esso, in caso di identificarlo in seguito (per modificare / cancellarlo)

static PendingIntent    getActivity(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent).
static PendingIntent    getBroadcast(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will perform a broadcast, like calling Context.sendBroadcast().
.

Il codice di richiesta è quell'ID.

Nel tuo codice, continui a reimpostare il stesso in attesa, utilizza invece un diverso codice di richiesta ogni volta.

PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0);
.

Deve essere un intero, suppongo che tu abbia un primario ( ItemId ) che può identificare l'allarme A da Alarm B.

Altri suggerimenti

È possibile impostare più allarmi fornendo un codice di richiesta diverso in PendingInt.GetBroadcast (......)

L'approccio che ho utilizzato per impostare più allarme è che ho creato un singolo allarme.Ho inizializzato un numero intero statico nella classe di impostazione dell'allarme che verrà incrementata ogni volta dalla mia attività principale ogni volta che faccio clic sul pulsante "Aggiungi allarme" nella mia attività principale. Ad esempio.

mainactivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void addAlarmClick(View v) {
    AlarmActivity.broadcastCode++;
    startActivity(new Intent(this, AlarmActivity.class));
}
}
.

Aractity.java

public class AlarmActivity extends AppCompatActivity {`
//........
public static int broadcastCode=0;
//........
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,
                            broadcastCode, myIntent, 0);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top