21

मैं अधिसूचना से जानकारी को आमंत्रित करने की कोशिश कर रहा हूं, जबकि मेरी गतिविधि से मुझे शून्य मिल गया।एंड्रॉइड अधिसूचना लंबित इंटेंट एक्स्ट्रा नल

अधिसूचना के लिए कोड है:

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

कोड के लिए मुख्य गतिविधि में आशय से जानकारी प्राप्त;

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

अधिसूचना अधिसूचित होने से पहले मैंने सत्यापित किया है, बंडल शून्य नहीं है, और इसमें अतिरिक्त आईडी है। जबकि, जब मैंने इसे मंशा से लाने की कोशिश की, तो यह चला गया। मदद। resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

नोटिस:: यदि आप resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); के रूप में जोड़ने यह काम नहीं करेगा

+0

मैंने "resultIntent.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP) जोड़ने का भी प्रयास किया;", लेकिन कोई काम नहीं। – antonio081014

+1

कोई कारण नहीं है कि आप 'resultPendingIntent.getExtras() 'का उपयोग नहीं कर रहे हैं? – PearsonArtPhoto

+0

मैंने अभी यह लाइनें बनाई हैं कि यह जांचने के लिए कि क्या मेरे लंबित इंटेंन्ट में अतिरिक्त है, और मैंने सत्यापित किया है कि मैंने वहां क्या रखा है। – antonio081014

उत्तर

8

मैं बस जवाब है, ऐड लाइन मिल गया।

मैंने अन्य ध्वज जैसे "FLAG_ACTIVITY_NEW_TASK" और "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED" की भी कोशिश की। न तो यहां काम करता है।

+1

मैं वही बात कर रहा था। प्रलेखन में कोई सुराग क्यों इस ध्वज की आवश्यकता है? यह कहता है "अगर सेट है, तो गतिविधि लॉन्च नहीं की जाएगी यदि यह पहले से ही इतिहास स्टैक के शीर्ष पर चल रही है।" – mparaz

21

मेरे लिए, Intent.FLAG_ACTIVITY_SINGLE_TOP सेटिंग के अलावा, मैं आशय के लिए एक अनूठा कार्रवाई जोड़ने के लिए किया था: setAction (..) के बिना

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

.., अतिरिक्त प्राप्त आशय पर रिक्त है मेरी अधिसूचना सक्रियता द्वारा।

इस पोस्ट में मदद करता है यह समझाने: https://stackoverflow.com/a/3128271/2162226

13

PendingIntent में इस ध्वज PendingIntent.FLAG_UPDATE_CURRENT का उपयोग इसके लिए मुझे

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

मैं एक स्थानीय एकता के लिए प्लगइन अधिसूचना में काम कर रहा था जब मैं एक ही समस्या का सामना करना पड़ा काम है -> मैंने ऐप लॉन्च किया, स्थानीय अधिसूचना निर्धारित की, ऐप को पृष्ठभूमि में भेजा, स्थानीय अधिसूचना दिखाई दी और, जब मैंने उस पर क्लिक किया, ऐप फिर से शुरू किया गया और getIntent().getExtras()null था।

मेरे मामले में, समस्या यह थी कि मैं गलत इरादे पर अतिरिक्त प्राप्त करने की कोशिश कर रहा था। सृजन के पल में, जब आप इसे प्राप्त करते हैं, तो यह सुनिश्चित करने के लिए कि प्राप्तकर्ता आप अपेक्षा करते हैं, एक साधारण टूस्ट्रिंग के साथ इरादों को मुद्रित करने का प्रयास करें।

onNewIntent विधि पर भी नज़र डालें।

संबंधित मुद्दे