Android Auto में, मैसेज पढ़ने और उनका जवाब देने के लिए, सूचनाओं की सुविधा के साथ-साथ मैसेजिंग की बेहतर सुविधाएं भी उपलब्ध हैं. ये सुविधाएं, कार के लिए Android App Library का इस्तेमाल करके बनाई गई हैं.
सूचनाओं की मदद से मैसेज भेजने की सुविधा उपलब्ध कराना
टेम्प्लेट वाले मैसेजिंग अनुभव की सुविधा देने वाले सभी ऐप्लिकेशन को, Android Auto के लिए मैसेजिंग से जुड़ी सूचनाएं भी उपलब्ध करानी होंगी. इस इंटिग्रेशन की मदद से, उपयोगकर्ता टेंप्लेट वाले ऐप्लिकेशन को खोले बिना ही मैसेज पढ़ सकते हैं और उनका जवाब दे सकते हैं.
टेंप्लेट का इस्तेमाल करके मैसेज भेजने की सुविधा बनाना
अपने ऐप्लिकेशन के लिए टेंप्लेट वाली सुविधा बनाने के लिए, कार के लिए Android App Library का इस्तेमाल करना और टेंप्लेट वाले ऐप्लिकेशन में Android Auto के लिए सहायता जोड़ना में दिए गए निर्देशों का पालन करें. इसके बाद, इस पेज पर दिए गए दिशा-निर्देश पढ़ें. इससे आपको टेंप्लेट वाले मैसेजिंग ऐप्लिकेशन के लिए तय की गई ज़रूरी शर्तों के बारे में पता चलेगा.
अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइलों को कॉन्फ़िगर करना
Android Auto को अपने ऐप्लिकेशन की सुविधाओं के बारे में बताने के लिए, आपके ऐप्लिकेशन को यह काम करना होगा:
अपनी मेनिफ़ेस्ट फ़ाइल में जाकर, कैटगरी के लिए सहायता उपलब्ध होने की जानकारी देना
आपके ऐप्लिकेशन को अपने CarAppService के इंटेंट फ़िल्टर में, androidx.car.app.category.MESSAGING कार ऐप्लिकेशन कैटगरी का एलान करना होगा.
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MESSAGING"/>
</intent-filter>
</service>
...
<application>
कार ऐप्लिकेशन के लिए कम से कम एपीआई लेवल सेट करना
ConversationItem एपीआई सिर्फ़ Car API 7 या इसके बाद के वर्शन पर काम करता है. इसलिए, आपको minCarApiLevel मेटाडेटा को भी उसी वैल्यू पर सेट करना चाहिए. ज़्यादा जानकारी के लिए, Car App API का लेवल देखें.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="7"/>
...
</application>
Android Auto के साथ काम करने की सुविधा के बारे में जानकारी देना
automotive_app_desc.xml फ़ाइल में, पुष्टि करें कि notification और template, दोनों सुविधाओं का एलान किया गया हो. इस फ़ाइल का इस्तेमाल, Android Auto के साथ काम करने की सुविधा का एलान करने के लिए किया जाता है:
<automotiveApp>
<uses name="notification" />
<uses name="template" />
</automotiveApp>
अगर आपके ऐप्लिकेशन को डिफ़ॉल्ट एसएमएस हैंडलर के तौर पर सेट किया जा सकता है, तो पक्का करें कि आपने यहां दिया गया <uses> एलिमेंट शामिल किया हो. ऐसा न करने पर, Android Auto में पहले से मौजूद डिफ़ॉल्ट हैंडलर का इस्तेमाल, इनकमिंग एसएमएस/मल्टीमीडिया मैसेज को मैनेज करने के लिए किया जाएगा. इससे डुप्लीकेट सूचनाएं मिल सकती हैं.
<automotiveApp>
...
<uses name="sms" />
</automotiveApp>
बातचीत दिखाना
किसी उपयोगकर्ता की बातचीत की खास जानकारी दिखाने के लिए, ListTemplate या SectionedItemTemplate में ConversationItem ऑब्जेक्ट की सूची दिखाई जा सकती है.
उपयोगकर्ता को बेहतर अनुभव देने के लिए, हमारा सुझाव है कि आप ज़्यादा से ज़्यादा 5 से 10 सबसे नई या सबसे ज़रूरी बातचीत उपलब्ध कराएं. साथ ही, हर बातचीत के लिए ज़्यादा से ज़्यादा पांच नए मैसेज उपलब्ध कराएं. इससे पेज लोड होने की परफ़ॉर्मेंस बेहतर होती है. साथ ही, उपयोगकर्ताओं को सबसे काम का कॉन्टेंट दिखता है और इंटरैक्शन का समय कम हो जाता है.
class MyMessagingScreen(carContext: CarContext) : Screen(carContext) { override fun onGetTemplate(): Template { val itemListBuilder = ItemList.Builder() val conversations: List<MyConversation> = getConversations() // Retrieve conversations for (conversation: MyConversation in conversations) { val carMessages: List<CarMessage> = conversation.getMessages() .map { message -> // CarMessage supports additional fields such as MIME type and URI, // which you should set if available CarMessage.Builder() .setSender(message.sender) .setBody(message.body) .setReceivedTimeEpochMillis(message.receivedTimeEpochMillis) .setRead(message.isRead) .build() } itemListBuilder.addItem( ConversationItem.Builder( conversation.id, CarText.create(conversation.title), Person.Builder() .setName("Me") .setKey("self_id") .build(), carMessages, myConversationCallback ) .build() ) } val header = Header.Builder() .setStartHeaderAction(Action.APP_ICON) .setTitle("Conversations") .build() return ListTemplate.Builder() .setHeader(header) .setSingleList(itemListBuilder.build()) .build() } }
हर ConversationItem में, मैसेज चलाने, उसे पढ़े गए के तौर पर मार्क करने, और जवाब देने की कार्रवाइयां अपने-आप दिखती हैं. इन कार्रवाइयों को ConversationItem बनाते समय उपलब्ध कराए गए ConversationCallbackDelegate मैनेज करता है.
अगर आपका ऐप्लिकेशन बातचीत के शॉर्टकट उपलब्ध कराता है, तो पुष्टि करें कि ConversationItem बनाते समय दिया गया आईडी, उस बातचीत के शॉर्टकट के आईडी के जैसा ही हो.
बातचीत अपडेट करना
जब उपयोगकर्ता मैसेज भेजते और पाते हैं, तब आपको अपने ऐप्लिकेशन की स्क्रीन को रीफ़्रेश करना चाहिए, ताकि नए मैसेज शामिल किए जा सकें. इसके लिए, invalidate() को कॉल करें. टेंप्लेट के कॉन्टेंट रीफ़्रेश करना लेख पढ़ें.
उपयोगकर्ताओं को बेहतरीन अनुभव देने के लिए, हमारा सुझाव है कि रीफ़्रेश होने में लगने वाले समय को 500 मिलीसेकंड या उससे कम रखें. अगर बार-बार रीफ़्रेश करने में ज़्यादा समय लगता है, तो आने वाले मैसेज लोड करते समय, लोडिंग की स्थिति दिखाई जा सकती है.
सूचना की प्राथमिकता को सही तरीके से सेट करना
ध्यान भटकाने वाली सूचनाओं को कम करने के लिए, आपके ऐप्लिकेशन को आने वाली सूचनाओं की अहमियत कम करनी चाहिए. ऐसा तब करना चाहिए, जब कोई व्यक्ति आपकी बातचीत देख रहा हो. इससे सूचनाएं, हेड अप नोटिफ़िकेशन (एचयूएन) के तौर पर नहीं दिखेंगी.
यह ट्रैक किया जा सकता है कि कोई बातचीत दिख रही है या नहीं. इसके लिए, आपको उस Screen के लाइफ़साइकल पर नज़र रखनी होगी जो बातचीत को दिखाता है. स्क्रीन का लाइफ़साइकल देखें.
किसी सूचना को एचयूएन के तौर पर दिखने से रोकने के लिए, उसकी प्राथमिकता को IMPORTANCE_DEFAULT या उससे कम पर सेट करें.
टेंप्लेट वाले मैसेजिंग ऐप्लिकेशन डिस्ट्रिब्यूट करना
टेम्पलेट वाली मैसेजिंग की सुविधा देने वाले ऐप्लिकेशन को सिर्फ़ Google Play पर इंटरनल टेस्टिंग और क्लोज़्ड टेस्टिंग ट्रैक के लिए पब्लिश किया जा सकता है. इसलिए, आपको ओपन टेस्टिंग या प्रोडक्शन ट्रैक के लिए सपोर्ट देने वाले बिल्ड का प्रमोशन नहीं करना चाहिए. ऐसा इसलिए, क्योंकि इन ट्रैक पर बिल्ड सबमिट करने पर उन्हें अस्वीकार कर दिया जाएगा.