21

Próbuję wysyłać informacje z powiadomienia do wywoływanej aktywności, podczas gdy z mojej aktywności uzyskałem wartość null.Powiadomienie o Androidzie Oczekujące dodatki null

Kod do zgłoszenia jest:

private void showNotification() { 
Intent resultIntent = new Intent(this, MainActivity.class); 
if (D) 
    Log.d(TAG, "Id: " + Id); 
resultIntent.putExtra("ineedid", deviceId); 

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
stackBuilder.addParentStack(MeterActivity.class); 
stackBuilder.addNextIntent(resultIntent); 
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, 
    PendingIntent.FLAG_UPDATE_CURRENT); 
// Bundle tmp = resultIntent.getExtras(); 
// if (tmp == null) { 
// Log.d(TAG, "tmp bundle is null"); 
// } else { 
// long id = tmp.getLong("ineedid", -1); 
// Log.d(TAG, "tmp id : " + id); 
// } 
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
    BLEMessengerService.this) 
    .setSmallIcon(R.drawable.ic_action_search) 
    .setContentTitle("Event tracker") 
    .setContentText("Events received").setOngoing(true) 
    .setContentIntent(resultPendingIntent) 
    .setWhen(System.currentTimeMillis()); 

int mId = R.string.service_notification_start_service; 
mNM.notify(mId, mBuilder.getNotification()); 
} 

Kod uzyskać informacje z zamiarem aktywności głównego;

Sprawdziłem przed otrzymaniem powiadomienia powiadomienia, pakiet nie jest pusty i ma identyfikator w dodatkach. Podczas gdy próbowałem go pobrać z intencji, zniknęło. Wsparcie.

+0

Próbowałem również dodać "resultIntent.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP);", ale bez pracy. – antonio081014

+1

Istnieje powód, dla którego nie używasz 'resultPendingIntent.getExtras()'? – PearsonArtPhoto

+0

Właśnie wykonałem te linie, aby sprawdzić, czy mój oczekujący intendent ma dodatki, i zweryfikowałem, że ma to, co tam umieściłem. – antonio081014

Odpowiedz

8

Właśnie dostałem odpowiedź, Add Line: resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

Wskazówka: jeśli dodasz go jako resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); to nie będzie działać.

Próbowałem również innych flag, takich jak "FLAG_ACTIVITY_NEW_TASK" i "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED". nie działa tutaj.

+1

Próbowałem tego samego. Jakaś wskazówka w dokumentacji, dlaczego ta flaga jest potrzebna? Po prostu mówi "Jeśli ustawione, działanie nie zostanie uruchomione, jeśli jest już uruchomione na górze stosu historii." – mparaz

21

Dla mnie, oprócz ustawiania Intent.FLAG_ACTIVITY_SINGLE_TOP, musiałem dodać unikalne działanie na zamiar:

Intent resultIntent = new Intent(caller, NotificationActivity.class); 

    String xId = getNextUniqueId(); 
    resultIntent.putExtra("x_id", xId); 
    resultIntent.setAction(xId); 
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

.. bez setAction (..), Dodatki jest null o zamiarze otrzymanej przez moją funkcję powiadamiania.

Ten post pomaga wyjaśnić: https://stackoverflow.com/a/3128271/2162226

13

w PendingIntent użyć tej flagi PendingIntent.FLAG_UPDATE_CURRENT to praca dla mnie

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
0

byłem pracujących w lokalnych powiadomień plugin dla Jedności kiedy napotkał ten sam problem -> Uruchomiłem aplikację, zaplanowałem powiadomienie lokalne, wysłałem aplikację na tło, pojawiło się powiadomienie lokalne, a po jej kliknięciu aplikacja została wznowiona, a getIntent().getExtras() została null.

W moim przypadku problemem było to, że próbowałem uzyskać dodatki w niewłaściwym celu. Spróbuj wydrukować intencje za pomocą prostego toString, w momencie tworzenia i kiedy je otrzymasz, aby upewnić się, że otrzymane wiadomości są zgodne z oczekiwaniami.

Zobacz także metodę onNewIntent.

Powiązane problemy