Próbuję użyć nowego interfejsu powiadomień. Dodałem 3 przyciski do powiadomień i chcę zapisać coś do mojej bazy danych po kliknięciu każdego z nich.Określanie kliknięcia AddAction dla powiadomień systemu Android
Samo powiadomienie działa dobrze i jest wyświetlane po wywołaniu, po prostu nie wiem, jak uchwycić każde z trzech różnych kliknięć przycisku.
Używam BroadcastReceiver
do przechwytywania kliknięć, ale nie wiem, jak stwierdzić, który przycisk został kliknięty.
Jest to kod z AddAction
(mam wyłączone resztę powiadomienia, jak również jego pracy) -
//Yes intent
Intent yesReceive = new Intent();
yesReceive.setAction(CUSTOM_INTENT);
Bundle yesBundle = new Bundle();
yesBundle.putInt("userAnswer", 1);//This is the value I want to pass
yesReceive.putExtras(yesBundle);
PendingIntent pendingIntentYes = PendingIntent.getBroadcast(this, 12345, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_v, "Yes", pendingIntentYes);
//Maybe intent
Intent maybeReceive = new Intent();
maybeReceive.setAction(CUSTOM_INTENT);
Bundle maybeBundle = new Bundle();
maybeBundle.putInt("userAnswer", 3);//This is the value I want to pass
maybeReceive.putExtras(maybeBundle);
PendingIntent pendingIntentMaybe = PendingIntent.getBroadcast(this, 12345, maybeReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_question, "Partly", pendingIntentMaybe);
//No intent
Intent noReceive = new Intent();
noReceive.setAction(CUSTOM_INTENT);
Bundle noBundle = new Bundle();
noBundle.putInt("userAnswer", 2);//This is the value I want to pass
noReceive.putExtras(noBundle);
PendingIntent pendingIntentNo = PendingIntent.getBroadcast(this, 12345, noReceive, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.calendar_x, "No", pendingIntentNo);
Jest to kod BroadcastReceiver
-
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("shuffTest","I Arrived!!!!");
//Toast.makeText(context, "Alarm worked!!", Toast.LENGTH_LONG).show();
Bundle answerBundle = intent.getExtras();
int userAnswer = answerBundle.getInt("userAnswer");
if(userAnswer == 1)
{
Log.v("shuffTest","Pressed YES");
}
else if(userAnswer == 2)
{
Log.v("shuffTest","Pressed NO");
}
else if(userAnswer == 3)
{
Log.v("shuffTest","Pressed MAYBE");
}
}
}
I zarejestrowałem BroadcastReceiver
w Manifeście. Ponadto chciałbym wspomnieć, że BroadcastReceiver
jest wywoływana, gdy klikam jeden z przycisków w powiadomieniu, ale intencja zawsze zawiera dodatkowe "2".
To notifcation iteslf -
to dziwne. Nie widzę żadnego błędu w Twoim kodzie. Jeśli zmienisz kolejność addAction() (i tworzenie PendingIntent), czy nadal otrzymujesz "2"? – Quanturium
W tym przypadku po prostu daje mi ostatnią addAction() I zadzwonił – Tofira
Mogę zarejestrować trzy BroadcastReceivers dla każdego z trzech przycisków, ale naprawdę chcę tego uniknąć. – Tofira