21

Bildirimlerden gelen etkinliğe bilgi göndermeye çalışıyorum, ancak etkinliğim boş.Android Bildirimi PendingIntent Ekstralar null

bildirim için kodudur: Ana aktivitedeki amacından bilgi almak

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 için; bildirim bildirim almak önce Doğruladım

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    long deviceID = getIntent().getLongExtra("ineedid", 
     -1); 
    if (ID == -1) { 
    if (D) 
     Log.i(TAG_D, "Wrong Id received."); 
    finish(); 
    } else { 
    device = dataSource.getDeviceByID(deviceID); 
    if (D) 
     Log.i(TAG_D, "Get the id."); 
    } 
} else { 
    if (D) 
    Log.d(TAG_D, "Bundle is null"); 
    finish(); 
} 

, paket boş değildir ve bu ekstralar içinde kimliğine sahip olacaktır. Bunu niyetinden almaya çalıştığımda, o gitti. Yardım et. resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

DİKKAT: Eğer resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); olarak ekleyin eğer çalışmaz

+0

Ayrıca "resultIntent.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP)" ifadesini eklemeye çalıştım, ancak iş yok. – antonio081014

+1

'resultPendingIntent.getExtras()' kullanmadığın bir nedeni var mı? – PearsonArtPhoto

+0

Bu satırları, pendingIntent'imin Extras'a sahip olup olmadığını kontrol etmek için yaptım ve orada ne yazdığımı doğruladım. – antonio081014

cevap

8

Sadece cevap, eklenti çizgisi var.

Ayrıca "FLAG_ACTIVITY_NEW_TASK" ve "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED" gibi diğer bayrakları da denedim. burada da çalışmıyor. Benim için

+1

Aynı şeyi deniyordum. Bu bayrağın neden gerekli olduğuna dair herhangi bir ipucu var mı? Sadece "Ayarlanmışsa, etkinlik, tarih yığınının üstünde çalışıyorsa başlatılmayacak" diyor. – mparaz

21

, Intent.FLAG_ACTIVITY_SINGLE_TOP ayarı ek olarak, ben niyet için eşsiz eylemi eklemek zorunda: setAction (..) olmadan

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); 

.., Ekstra alınan Niyet üzerinde null Benim BildirimActivity tarafından.

Bu mesaj

anlatmaya yardımcı olur: https://stackoverflow.com/a/3128271/2162226

13

PendingIntent içinde benim

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

Aynı sorunla karşılaştı zaman Birlik eklentisi yerel bildirimler çalışıyordu için bir iş bu bayrak PendingIntent.FLAG_UPDATE_CURRENT kullanmak -> Uygulamayı başlattım, yerel bildirimi planladım, uygulamayı arka plana gönderdim, yerel bildirim belirdi ve üzerine tıkladığımda, uygulama yeniden başlatıldı ve getIntent().getExtras(), null oldu. Benim durumumda, sorun, ekstraları yanlış niyetle elde etmeye çalışıyordum idi. Amaçları, yaratılış anında ve aldığınız anda, aldığınız şeyin beklediğinizden emin olmak için basit bir toString ile yazdırmaya çalışın.

Ayrıca onNewIntent yöntemine bir göz atın.