मोबाइल नोटिफ़िकेशन इकट्ठा करें

Android एपीआई लेवल 26 और इसके बाद के वर्शन में, लगातार मिलने वाली सूचनाओं की ज़रूरत होती है फ़ोरग्राउंड सेवाएं शामिल हैं. इस ज़रूरी शर्त को इसलिए सेट किया गया है, ताकि डिवाइस को छिपने से रोका जा सके ऐसी सेवाओं की वजह से, सिस्टम के संसाधनों की ज़रूरत बहुत ज़्यादा पड़ सकती है. इनमें, बैटरी का ख़ास ख्याल रखा जाता है. इस ज़रूरी शर्त के चलते एक समस्या पैदा हो सकती है: अगर कोई ऐप्लिकेशन फ़ोरग्राउंड सेवाएं इस्तेमाल करने पर, सूचना को ध्यान से मैनेज नहीं किया जाता है. अगर इसे सभी सेवाओं पर शेयर किया जाता है, तो हो सकता है कि एक बार में कई खारिज नहीं की जा सकने वाली सूचनाएँ, जिसकी वजह से नोटिफ़िकेशन.

नेविगेशन जैसे SDK टूल का इस्तेमाल करने पर, यह समस्या और मुश्किल हो जाती है SDK टूल, जो उन ऐप्लिकेशन के अलावा फ़ोरग्राउंड सेवाओं का इस्तेमाल करता है जिनमें लगातार अलग-अलग तरह की सूचनाएं पाने की सुविधा देती हैं. इस वजह से, उन्हें एक ही जगह पर इकट्ठा करना मुश्किल हो जाता है. इन समस्याओं को ठीक करने के लिए, नेविगेशन SDK टूल v1.11 ने एक आसान एपीआई उपलब्ध कराया है इसकी मदद से, ऐप्लिकेशन के साथ-साथ SDK टूल में लगातार मिलने वाली सूचनाओं को मैनेज किया जा सकता है.

लगातार मिलने वाली सूचनाओं को एक साथ मैनेज करना

घटक

फ़ोरग्राउंड सेवा मैनेजर की मदद से, Android के फ़ोरग्राउंड के चारों ओर रैपर दिया जा रहा है सेवा क्लास और स्थायी सूचना क्लास की ज़रूरत होती है. इस रैपर का मुख्य फ़ंक्शन सूचना आईडी के दोबारा इस्तेमाल को लागू करना है ताकि सूचना मैनेजर का इस्तेमाल करके, सभी फ़ोरग्राउंड सेवाओं पर शेयर किया जा सकता है.


नेविगेशन SDK टूल में, ForegroundServiceManager सिंगलटन. यह सिंगलटोन सिर्फ़ शुरू की जा सकती है नेविगेशन SDK टूल के लाइफ़टाइम में एक बार इस्तेमाल किया जा सकता है. इस वजह से, अगर आप इनीशियलाइज़ेशन कॉल (initForegroundServiceManagerMessageAndIntent() या initForegroundServiceManagerProvider()), तो आपको घेरना चाहिए साथ ही, ट्राई कैच ब्लॉक के साथ वह पाथ भी डाला जाता है. नेविगेशन SDK टूल अगर किसी भी तरीके को एक से ज़्यादा बार कॉल किया जाता है, तो रनटाइम अपवाद दिखता है. ऐसा तब तक होता है, जब तक कि पहले ForegroundServiceManager के सभी संदर्भ साफ़ करें और कॉल करें हर अगली कॉल से पहले clearForegroundServiceManager().

initForegroundServiceManagerMessageAndIntent() के चार पैरामीटर ये हैं: application, notificationId, defaultMessage, और resumeIntent. अगर अंतिम तीन पैरामीटर शून्य होते हैं, तो सूचना मानक होती है नेविगेशन SDK टूल की सूचना. अन्य फ़ोरग्राउंड को अब भी छिपाया जा सकता है ऐप्लिकेशन में मौजूद सेवाएं ऐक्सेस करें. notificationId पैरामीटर सूचना आईडी के बारे में बताता है. इसका इस्तेमाल सूचना दिखाने के लिए किया जाना चाहिए. अगर ऐसा है शून्य है, तो एक आर्बिट्रेरी वैल्यू का इस्तेमाल किया जाता है. आप इसे अलग से काम करने के लिए सेट कर सकते हैं अन्य सूचनाओं से जुड़ी समस्या हो. जैसे, किसी दूसरे SDK टूल की सूचनाओं से. कॉन्टेंट बनाने defaultMessage ऐसी स्ट्रिंग है जो तब दिखती है, जब सिस्टम नहीं होता नेविगेट करना. resumeIntent एक इंटेंट है, जो सूचना मिलने पर ट्रिगर होता है जिस पर क्लिक किया जाता है. अगर resumeIntent खाली है, तो सूचना पर क्लिक करता है नज़रअंदाज़ किए जाते हैं.

initForegroundServiceManagerProvider() के तीन पैरामीटर इस प्रकार हैं application, notificationId, और notificationProvider. अगर फ़ाइनल दो पैरामीटर शून्य हैं, तो सूचना एक स्टैंडर्ड नेविगेशन SDK टूल होगी सूचना पर टैप करें. notificationId पैरामीटर ऐसा सूचना आईडी तय करता है जो का इस्तेमाल सूचना के लिए किया जाना चाहिए. अगर यह शून्य है, तो एक आर्बिट्रेरी मान होता है इस्तेमाल किया गया. इसे अलग-अलग तरह के विवादों के साथ काम करने के लिए, साफ़ तौर पर सेट किया जा सकता है सूचनाएं, जैसे कि किसी दूसरे SDK टूल से मिली सूचनाएं. अगर notificationProvider सेट है, तो सेवा देने वाली कंपनी सूचना को रेंडर करने के लिए जनरेट करना.

नेविगेशन SDK टूल getForegroundServiceManager() तरीका, फ़ोरग्राउंड सेवा मैनेजर सिंगलटन है. अगर आपने अब तक जनरेट नहीं किया है, तो यह initForegroundServiceManagerMessageAndIntent() को कॉल करने के बराबर है notificationId, defaultMessage, और इसके लिए शून्य पैरामीटर वाले resumeIntent.

ForegroundServiceManager को इस्तेमाल करने के तीन आसान तरीके हैं. पहले दो इसके लिए हैं किसी सेवा को फ़ोरग्राउंड में ले जाना और उससे बाहर ले जाना. आम तौर पर, उन्हें बनाई गई है. इन तरीकों का इस्तेमाल करने से यह पक्का होता है कि सेवाएं, शेयर की गई लगातार मिलने वाली सूचना से जुड़ी होती हैं. फ़ाइनल तरीका, updateNotification(), उस मैनेजर को फ़्लैग करता है कि सूचना में बदला गया हो और उसे फिर से रेंडर किया जाना चाहिए.

अगर आपको लगातार शेयर की जाने वाली सूचना पर पूरा कंट्रोल चाहिए, तो एपीआई एक NotificationContentProvider इंटरफ़ेस देता है सूचना की सुविधा देने वाला ऐप्लिकेशन, जिसमें सूचना पाने का एक ही तरीका होता है उसमें बदलाव कर सकें. इससे आपको बेस क्लास भी मिलती है. इससे आपको ये काम करने में मदद मिलती है कंपनी के बारे में बताने के लिए, इसका इस्तेमाल करें. बेस क्लास के मुख्य क्लास में से एक का मकसद है कि यह updateNotification() को कॉल करने का तरीका ForegroundServiceManager को ऐक्सेस करना होगा. अगर आप सूचना देने वाली कंपनी को नए मैसेज पाने हैं, तो इस इंटरनल तरीके का इस्तेमाल करें.

इस्तेमाल से जुड़ी स्थितियां

इस सेक्शन में, शेयर किए गए स्थायी डेटा का इस्तेमाल करने के लिए, इस्तेमाल के उदाहरण की जानकारी दी गई है नोटिफ़िकेशन.

ऐप्लिकेशन की फ़ोरग्राउंड सेवाओं की अन्य सूचनाओं को लगातार छिपाएं
सबसे आसान स्थिति, मौजूदा व्यवहार को बनाए रखना और सिर्फ़ नेविगेशन SDK टूल की जानकारी रेंडर करने के लिए लगातार मिलने वाली सूचना. अन्य सेवाएं फ़ोरग्राउंड सेवा मैनेजर का इस्तेमाल करके, इस सूचना को छिपाया जा सकता है startForeground() और stopForeground() तरीके.
ऐप्लिकेशन की फ़ोरग्राउंड सेवाओं की लगातार मिलने वाली सूचनाओं को छिपाएं. हालांकि, इस सुविधा को सेट कर दिया गया है नेविगेट न करने पर दिखने वाला डिफ़ॉल्ट टेक्स्ट
दूसरी सबसे आसान स्थिति, मौजूदा व्यवहार को बनाए रखना और सिर्फ़ नेविगेशन SDK टूल की जानकारी रेंडर करने के लिए लगातार मिलने वाली सूचना. जब सिस्टम नेविगेट नहीं कर रहा हो. जब सिस्टम नेविगेट नहीं कर रहा होता है, तो initForegroundServiceManagerMessageAndIntent() को दी गई स्ट्रिंग वह डिफ़ॉल्ट नेविगेशन SDK स्ट्रिंग के बजाय दिखता है, जिसमें टैग किया गया है "Google Maps". इस कॉल का इस्तेमाल रेज़्यूमे का इंटेंट सेट करने के लिए भी किया जा सकता है, सूचना पर क्लिक होने पर ट्रिगर होता है.
लगातार मिलने वाली सूचना को रेंडर करने का पूरा कंट्रोल अपने पास रखें
आखिरी स्थिति में, सूचना देने वाली कंपनी की जानकारी दें और उसे बनाएं और इसका इस्तेमाल करके उसे ForegroundServiceManager को पास कर रहा है initForegroundServiceManagerProvider(). इस विकल्प से आपको का पूरा कंट्रोल होता है कि सूचना में क्या रेंडर किया गया है. साथ ही, यह नेविगेशन SDK टूल की सूचना की जानकारी को इससे आपकी मदद के लिए, सूचना पर टैप करें. Google इसे वापस पाने का आसान तरीका उपलब्ध नहीं कराता सूचना में शामिल करना होगा.

सूचना देने वाली कंपनी का उदाहरण

कोड के इस उदाहरण में, सूचनाएं बनाने और उन्हें वापस करने का तरीका बताया गया है सूचना पाने से जुड़ी सामग्री देने वाले आसान तरीके का इस्तेमाल करें.

public class NotificationContentProviderImpl
   extends NotificationContentProviderBase
   implements NotificationContentProvider {
 private String channelId;
 private Context context;
 private String message;

 /** Constructor */
 public NotificationContentProviderImpl(Application application) {
   super(application);
   message = "-- uninitialized --";
   channelId = null;
   this.context = application;
 }

 /**
  * Sets message to display in the notification. Calls updateNotification
  * to display the message immediately.
  *
  * @param msg The message to display in the notification.
  */
 public void setMessage(String msg) {
   message = msg;
   updateNotification();
 }

 /**
  * Returns the notification as it should be rendered.
  */
 @Override
 public Notification getNotification() {
   Notification notification;

   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
     Spanned styledText = Html.fromHtml(message, FROM_HTML_MODE_LEGACY);
     String channelId = getChannelId(context);
     notification =
         new Notification.Builder(context, channelId)
             .setContentTitle("Notifications Demo")
             .setStyle(new Notification.BigTextStyle()
                 .bigText(styledText))
             .setSmallIcon(R.drawable.ic_navigation_white_24dp)
             .setTicker("ticker text")
             .build();
   } else {
     notification = new Notification.Builder(context)
         .setContentTitle("Notification Demo")
         .setContentText("testing non-O text")
         .build();
   }

   return notification;
 }

 // Helper to set up a channel ID.
 private String getChannelId(Context context) {
   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
     if (channelId == null) {
       NotificationManager notificationManager =
           (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
       NotificationChannel channel = new NotificationChannel(
           "default", "navigation", NotificationManager.IMPORTANCE_DEFAULT);
       channel.setDescription("For navigation persistent notification.");
       notificationManager.createNotificationChannel(channel);
       channelId = channel.getId();
     }
     return channelId;
   } else {
     return "";
   }
 }
}

NotificationContentProviderImpl बनाने के बाद, आप इस कोड का इस्तेमाल करके, SDK टूल को इस पर माइग्रेट करें:

ForegroundServiceManager f = NavigationApi.getForegroundServiceManager(getApplication());
mNotification = new NotificationContentProviderImpl(getApplication());
NavigationApi.clearForegroundServiceManager();
NavigationApi.initForegroundServiceManagerProvider(getApplication(), null, mNotification);

सीमाएं और आने वाले समय के प्लान

  • initForegroundServiceManagerMessageAndIntent() या initForegroundServiceManagerProvider() को जल्दी कॉल करें, ताकि इस्तेमाल का अनुमानित उदाहरण बेहतर तरीके से बताया गया है. आपको इस तरीके को कॉल करना होगा इससे पहले कि आप नया नेविगेटर बनाएं.
  • अगर कोड पाथवे है, तो initForegroundServiceManagerMessageAndIntent() या initForegroundServiceManagerProvider() एक से ज़्यादा बार डाला गया. नेविगेशन SDK टूल v2.0 में, इस तरीके को कॉल करें कई बार रनटाइम अपवाद के बजाय एक जांचे गए अपवाद देता है.
  • हो सकता है कि Google अभी भी आपके सभी कॉन्टेंट के लिए एक जैसी स्टाइलिंग बनाए रखने के लिए हेडर स्टाइल से मेल खाने वाली सूचना की लाइफ़टाइम वैल्यू.
  • सूचना देने वाली कंपनी तय करते समय, चेतावनी देने की सुविधा को कंट्रोल किया जा सकता है को प्राथमिकता दें.
  • Google मोड़-दर-मोड़ जानकारी पाने के लिए कोई आसान तरीका उपलब्ध नहीं कराता है ऐसी जानकारी जिसे सूचना देने वाली कंपनी, सूचना में डाल सकती है.