Android सूचना नहीं दिखा रहा है


115

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

मैंने कोड स्थापित किया है। अधिसूचना काम कर रही होनी चाहिए, लेकिन किसी कारण से यह काम नहीं कर रही है। Notificationसब पर नहीं दिख रहा है। मुझे नहीं पता कि मैं क्या याद कर रहा हूं।

उन फ़ाइलों का कोड:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected

notificationManager.notify(0, n);

जब आप प्रश्न पूछें तो कृपया अधिक संक्षिप्त होने का प्रयास करें। आप यह उल्लेख करने में विफल हैं कि क्या काम नहीं कर रहा है वास्तव में, आप यह भी उल्लेख नहीं करते हैं कि कुछ काम नहीं कर रहा है। है Activityलॉन्च नहीं किया जा रहा है? है Notificationनहीं दिखा रहा है?
slinden77

3
@dmmh मैंने अपने सवाल में कहा कि मेरी समस्या क्या है! और मुझे सवाल कुछ गलत नहीं लगा। मेरा सवाल समस्या के बारे में विशिष्ट था। यदि आप एक विशेषज्ञ नहीं हैं, तो आपको प्रहार करने की कोई आवश्यकता नहीं है! और tato469 का जवाब ठीक था।
चौधरी एएम

3
मैं इंगित कर रहा हूं कि इस साइट का उद्देश्य आपके लिए अपनी समस्याओं को ठीक करना नहीं है, बल्कि दूसरों के लिए भी समस्याओं का समाधान खोजने में सक्षम होना है। मैं प्रहार नहीं कर रहा हूं। मुझे खेद है कि मैंने आपकी भावनाओं को आहत किया है, लेकिन तथ्य यह है कि आपका प्रश्न गलत था, उत्तर गलत था, और यह सब भ्रामक जानकारी अन्य नौसिखिया प्रोग्रामर को जन्म देगी, जिनके पास एक ही मुद्दा है जैसा कि आप वर्णन करते हैं, समाधान का प्रयास करने का सहारा नहीं लेते हैं। आपके द्वारा प्रदत्त कोड के आधार पर। यह किसी भी मामले में प्रासंगिक नहीं है या नहीं अगर मैं विशेषज्ञ हूं या नहीं। खासकर जब से मैं सही हूं, आपका सवाल अस्पष्ट है, और दूसरा जवाब गलत है।
स्लाइड १

मैं इस सवाल और जवाब को दूर करने जा रहा हूं क्योंकि यह भ्रामक है। आपका दिन शुभ हो।
स्लाइड १

1
प्रश्न को बदल दिया, ताकि लोग समझ सकें कि समस्या क्या है।
चौधरी AM

जवाबों:


412

आइकन के बिना कोड काम नहीं करेगा। इसलिए, setSmallIconइसे काम करने के लिए इस तरह से बिल्डर चेन में कॉल जोड़ें :

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) और इसके बाद के संस्करण

एंड्रॉइड 8 ने एक channelIdका उपयोग करके संपत्ति की स्थापना की एक नई आवश्यकता शुरू की NotificationChannel

private NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

CHANNEL_ID कैसे प्राप्त करें? कृपया मदद करें
अनंत प्रसाद

@ LAnantaPrasad CHANNEL_ID आपके लिए एक पहचानकर्ता है। यह आपके द्वारा चैट सूचना या समूह चैट की तरह समूह सूचनाएँ है।
केसी डैनियल

धन्यवाद, setChannelIdआवश्यक हैं। इससे पहले कि मैं इसे जोड़ता, अधिसूचना मेरे सोनी डिवाइस पर दिखाता है, लेकिन सैमसंग डिवाइस नहीं।
वेसली


2
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }इस चेक के बिना चेक को भी शामिल करें, यदि आपका डिवाइस API> = 26 है, तो भी अधिसूचना दिखाई नहीं देगी।
कौशिक शोम चौधरी

58

वास्तव में andoernando Valle द्वारा किया गया उत्तर सही प्रतीत नहीं होता है। तब फिर से, आपका प्रश्न अत्यधिक अस्पष्ट है क्योंकि आप यह उल्लेख करने में विफल हैं कि क्या गलत है या काम नहीं कर रहा है।

आपके कोड को देखते हुए मैं मान रहा हूँ कि Notificationबस नहीं दिख रहा है।

आपकी सूचना दिखाई नहीं दे रही है, क्योंकि आपने कोई आइकन प्रदान नहीं किया है। भले ही एसडीके प्रलेखन का उल्लेख नहीं किया जा रहा है, यह आवश्यक है, यह वास्तव में बहुत अधिक है और आपका Notificationएक के बिना नहीं दिखाया जाएगा।

addActionकेवल 4.1 के बाद से उपलब्ध है। इससे पहले कि आप PendingIntentएक लॉन्च करने के लिए उपयोग करेंगे Activity। आप निर्दिष्ट करते हैं PendingIntent, इसलिए आपकी समस्या कहीं और है। तार्किक रूप से, किसी को यह निष्कर्ष निकालना चाहिए कि वह लापता आइकन है।


मुझे वह मुद्दा मिला। लेकिन उचित उत्तर के लिए धन्यवाद। तुम्हारी मदद के लिए शुक्रिया।
चौधरी एएम

1
आपने कहा कि AddAction केवल 4.1 के बाद से उपलब्ध है लेकिन यह गलत है, मैंने इसे 2.3 में इस्तेमाल किया। नोटिफिकेशन मैनुअल बटन के बारे में नोटिफिकेशन के बारे में बात नहीं करता है: "एंड्रॉइड 4.1 से पहले प्लेटफॉर्म पर एक्शन बटन दिखाई नहीं देंगे।" आप यहाँ देख सकते हैं: AddAction android.support.v4.app में शामिल है
hereernando Valle

1
ओपी उपयोग कर रहा है Notification.Builder, न कि NotificationCompat.Builder, जैसे आप सुझाव दे रहे हैं। सिर्फ इसलिए कि एक संगतता पुस्तकालय है और इसका उपयोग किया जा सकता है, इसका मतलब यह नहीं है कि फ़ंक्शन सामान्य एपीआई में उपलब्ध है। आपके द्वारा प्रदान किया गया लिंक वास्तव में इसे निर्धारित करता है। यह प्रश्न स्पष्ट रूप से संबंधित है Notification.Builder, जैसा कि उदाहरण से पता चलता है। और अनुकूलता पुस्तकालय में केवल 4.1 उपलब्ध होने के बाद इस फ़ंक्शन को शामिल किया गया था। आपका जवाब भ्रामक है, क्योंकि अब आप सुझाव देते हैं कि यह 2.3 से उपलब्ध है।
स्लिंडेंन sl

क्षमा करें यदि मैं
चूक करता

4
अर्घ आइकन !! यह भी एहसास नहीं था कि यह गायब था लेकिन इसे जोड़ने से समस्या ठीक हो गई। लापता आइकन के बारे में सांत्वना में उपयोगी कुछ भी नहीं देखा, चुपचाप विफल हो रहा है।
पीट

33

आपको छोटा आइकन याद आ रहा था। मैंने वही गलती की और उपरोक्त कदम ने इसे हल कर दिया।

आधिकारिक दस्तावेज के अनुसार: एक अधिसूचना वस्तु में निम्नलिखित शामिल होने चाहिए:

  1. एक छोटा आइकन, जो सेटस्मॉलकॉन द्वारा सेट किया गया है ()

  2. एक शीर्षक, setContentTitle द्वारा निर्धारित ()

  3. विस्तार पाठ, setContentText द्वारा निर्धारित ()

  4. एंड्रॉइड 8.0 (एपीआई स्तर 26) और उच्चतर पर , एक वैध अधिसूचना चैनल आईडी, सेटचैनलाइन द्वारा स्थापित () या नोटिफिकेशन.कॉम में प्रदान किया गया। चैनल बनाते समय निर्माणकर्ता।

Http://developer.android.com/guide/topics/ui/notifiers/notifications.html देखें


3
यह सच नहीं है। यदि आप setContent का उपयोग करते हुए कस्टम अधिसूचना लेआउट का उपयोग करते हैं, तो किसी शीर्षक या पाठ की आवश्यकता नहीं है।
रे ली

11

इसने आज मुझे उलझा दिया, लेकिन मुझे एहसास हुआ कि यह एंड्रॉइड 9.0 (पाई) पर था, डू नॉट डिस्टर्ब बाय डिफॉल्ट बाय भी सभी सूचनाएं छिपाता है, बजाय इसके कि उन्हें एंड्रॉइड 8.1 (ओरेओ) और उससे पहले की तरह ही चुप करा दें । यह सूचनाओं पर लागू नहीं होता है।

मुझे अपने डेवलपमेंट डिवाइस पर DND होना पसंद है, इसलिए DND सेटिंग्स में जाकर सेटिंग को नोटिफ़िकेशन को बदलने के लिए (लेकिन उन्हें छिपाएं नहीं) मेरे लिए इसे ठीक कर दिया।


9

सूचना को दृश्यमान बनाने के लिए Android 8.1 (Oreo) के बाद Android संस्करणों के लिए सूचना चैनलों का निर्माण अनिवार्य है । यदि ओरेओ + एंड्रॉइड के लिए आपके ऐप में सूचनाएं दिखाई नहीं देती हैं, तो आपका ऐप शुरू होने पर आपको निम्नलिखित फ़ंक्शन को कॉल करना होगा -

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

1

मुझे लगता है कि आप भूल जाते हैं

addAction(int icon, CharSequence title, PendingIntent intent)

यहां देखें: एक्शन जोड़ें


1
विधि addAction()उपलब्ध नहीं है Notification.Builder
स्लिंडेंन sl

1
यह मौजूद है, लेकिन पदावनत। इसके बजाय, आप एक Actionउदाहरण दे सकते हैं जिसे आप बना सकते हैं Notification.Action.Builder। पुनश्च, हमेशा कम्पैटिबल ऑप्शन का उपयोग करें (यानी, NotificationCompat), क्योंकि Google बग को पैच करता है और उनके साथ बेहतर संगतता प्रदान करता है
Gökhan Barış Aker

यदि आप कोई कार्रवाई निर्दिष्ट नहीं करना चाहते हैं, तो बस .setContentIntent(null)बिल्डर के साथ उपयोग करें ।
गोखन बारिस अकर

1

मेरे एंड्रॉइड ऐप के साथ भी यही समस्या थी। मैं नोटिफिकेशन आज़मा रहा था और पाया कि सूचनाएं मेरे एंड्रॉइड एमुलेटर पर दिखाई दे रही थीं जो एक एंड्रॉइड 7.0 (नूगाट) सिस्टम चलाता था, जबकि यह मेरे फोन पर नहीं चल रहा था जिसमें एंड्रॉइड 8.1 (ओरेओ) था।

प्रलेखन पढ़ने के बाद, मैंने पाया कि एंड्रॉइड में एक अधिसूचना चैनल नामक एक सुविधा थी, जिसके बिना ओरेओ उपकरणों पर सूचनाएं दिखाई नहीं देंगी। नीचे अधिसूचना चैनलों पर आधिकारिक Android प्रलेखन के लिए लिंक है।


1

मेरे लिए यह एक मुद्दा था deviceToken। कृपया जांच लें कि रिसीवर और प्रेषक डिवाइस टोकन आपके डेटाबेस में या जहां भी आप सूचनाएं भेजने के लिए इसे एक्सेस कर रहे हैं, ठीक से अपडेट किया गया है।

उदाहरण के लिए, ऐप लॉन्च पर डिवाइस टोकन को अपडेट करने के लिए निम्नलिखित का उपयोग करें। इसलिए इसे हमेशा ठीक से अपडेट किया जाएगा।

// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});

यह कहां deviceTokenघोषित किया गया है?
पीटर मोर्टेंसन

onSuccessखाली क्यों है ?
पीटर मोर्टेंसन

@PeterMortensen .. सफलता पर आप एक नया इरादा शुरू करने, या एक टोस्ट देने, या एक ही पृष्ठ पर शेष जैसे अपने तर्क की अनुमति दे सकते हैं। डिवाइसटोकन घोषणा के लिए आप इसे निजी स्ट्रिंग डिवाइस के रूप में घोषित कर सकते हैं। इससे पहले कि आप अपने पेज पर जाएं
DragonFire

(अपनी टिप्पणी को और अधिक स्पष्ट करने के लिए: दो onSuccessएस हैं - मैं आंतरिक एक का उल्लेख कर रहा था (जो खाली है))
पीटर मोर्टेंसन

1

आपको build.gradle फ़ाइल को भी बदलना होगा, और इसमें इस्तेमाल किया हुआ Android SDK संस्करण जोड़ना होगा:

implementation 'com.android.support:appcompat-v7:28.0.0'

यह मेरे मामले में एक आकर्षण की तरह काम करता है।


0

सूचनाएं दिखाई नहीं जा सकती हैं यदि आप एक के बाद एक सूचनाओं को तेजी से दिखाते हैं या किसी मौजूदा को रद्द करते हैं, तो तुरंत इसे फिर से दिखाएं (उदाहरण के लिए चल रहे अधिसूचना में बदलाव के बारे में उपयोगकर्ता को सूचित करने के लिए हेड-अप-अधिसूचना को ट्रिगर करना)। इन मामलों में सिस्टम अधिसूचना को ब्लॉक करने का निर्णय ले सकता है जब यह महसूस करता है कि वे उपयोगकर्ता के लिए बहुत भारी / स्पैम हो सकते हैं।

कृपया ध्यान दें, कम से कम स्टॉक एंड्रॉइड पर (10 के साथ परीक्षण किया गया) बाहर से यह व्यवहार थोड़ा यादृच्छिक लगता है: यह कभी-कभी होता है और कभी-कभी ऐसा नहीं होता है। मेरा अनुमान है, बहुत कम समय सीमा है, जिसके दौरान आपको बहुत अधिक सूचनाएं भेजने की अनुमति नहीं है। कॉल करना NotificationManager.cancel()और फिर NotificationManager.notify()कभी-कभी इस व्यवहार का कारण हो सकता है।

यदि आपके पास विकल्प है, तो अधिसूचना को अपडेट करते समय इसे पहले रद्द न करें, लेकिन बस NotificationManager.notify()अद्यतन अधिसूचना के साथ कॉल करें । यह सिस्टम द्वारा पूर्वोक्त अवरोधन को ट्रिगर नहीं करता है।


-1

यदि आप सूचना चैनल का उपयोग करते समय संस्करण> = Android 8.1 (Oreo) पर हैं, तो इसके महत्व को उच्च पर सेट करें:

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

1
आपको "एक संस्करण> =" से क्या मतलब है ? क्या आपका मतलब है "संस्करण 8.1 (या उससे ऊपर)" पर ? कृपया अपने उत्तर को संपादित करके जवाब दें , यहाँ टिप्पणियों में (उपयुक्त के रूप में) नहीं।
पीटर मोर्टेंसन

@PeterMortensen मुझे इस बात के लिए क्षमा करता है कि यह मुझे ठीक करने के लिए सिर्फ एक प्रकार का धन्यवाद था
फैसल नसीर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.