दिलचस्प पोस्ट
कैसे चेक करें कि दिनांक वस्तु कल के बराबर है? जावा वीएम पर मेमोरी बाधाएं और कोडिंग शैली सशर्त शामिल mysql में स्ट्रिंग के लिए एक बड़ी टेक्स्ट फ़ाइल खोजने का सस्ता तरीका क्या HTML5 को ड्रैग-ड्रॉप फ़ोल्डर्स या फ़ोल्डर ट्री का अपलोड करना है? कैसे एक BufferedImage पैमाने पर एक सरणी में सभी आइटमों के संयोजन खोजने का सबसे अच्छा तरीका क्या है? कैसे प्रोग्राम करने के लिए iPhone म्यूट स्विच समझ? क्या सी # में पैरामीटर बाधा के साथ एक जेनेरिक कन्स्ट्रक्टर है? एन्कोडिंग और वर्णसेट के बीच क्या अंतर है? मैं कोने 2 में "चयन" में नया चयन कैसे प्राप्त करूं? IOS 8 UITableView विभाजक inset 0 काम नहीं कर रहा है खराब क्लास फ़ाइल जादू या संस्करण अंतिम ब्लॉक को उचित रूप से गद्देदार नहीं देखा गया पटरियों 3.1 एसेट पाइपलाइन: नियंत्रक-विशिष्ट स्क्रिप्ट को कैसे लोड करें?

मेनिफ़ेस्ट बनाम गतिविधि में प्रसारण रिसीवर रजिस्टर

मुझे यह समझने में कुछ मदद की ज़रूरत है कि जब मुझे उम्मीद है कि मेरे प्रसारण रिसीवर काम करेंगे तो मैनिफेस्ट बनाम में पंजीकृत होने पर चल रहे गतिविधि या सेवा से पंजीकृत होना होगा।

इसलिए उदाहरण के लिए अगर मैं निम्नलिखित अभिप्राय फ़िल्टर के साथ अकेले एक अकेले रिसीवर को पंजीकृत करता हूं तो इसके बिना सेवा / गतिविधि संदर्भ किए कार्य करता है:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blk_burn.standalonereceiver" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name="TestReceiver"> <intent-filter> <action android:name="android.media.AUDIO_BECOMING_NOISY"/> </intent-filter> </receiver> </application> </manifest> 

हालांकि अगर मैं android.media.AUDIO_BECOMING_NOISY को और android.intent.action.HEADSET_PLUG के साथ android.intent.action.HEADSET_PLUG हूं, तो रिसीवर ट्रिगर नहीं होता है ( एंड्रॉइड डॉक्युमेंटेशन )

इस साइट पर मुझे जो मिला है, उस से आपको इस रिसीवर को एक गतिविधि या सेवा से पंजीकृत करना होगा जो काम करने के लिए पहले ही चल रहा है ( पोस्ट )।

  • क्या कोई मुझे बता सकता है कि मैनेजमेंट में अपना इरादा फ़िल्टर समायोजित करते समय यह क्यों काम नहीं करता है और आपको पृष्ठभूमि में सेवा चलाने की ज़रूरत क्यों है, जो रिसीवर संदर्भ / रजिस्टर करता है?

  • क्या ऐसा काम है जिससे कि मैं सिर्फ android.intent.action.HEADSET_PLUGandroid.intent.action.HEADSET_PLUG साथ android.intent.action.HEADSET_PLUG फिल्टर का उपयोग करते हुए अपने ऐप के मैनिफ़ेस्ट में अपना रिसीवर पंजीकृत कर सकता हूं?

  • मैं कैसे पहचान सकता हूं कि एंड्रॉइड प्रलेखन से कौन से ब्रॉडकास्ट क्रियाओं को एक सेवा या गतिविधि की आवश्यकता होती है, उन्हें मैनिफेस्ट में सिर्फ सही फ़िल्टर बनाकर बना दिया जाना चाहिए?

वेब के समाधान से एकत्रित समाधान "मेनिफ़ेस्ट बनाम गतिविधि में प्रसारण रिसीवर रजिस्टर"

यदि आपका रिसीवर मैनिफेस्ट में पंजीकृत है, और आपका ऐप नहीं चल रहा है, तो प्रसारण को संभालने के लिए एक नई प्रक्रिया बनाई जाएगी। यदि आप इसे कोड में पंजीकृत करते हैं, तो यह उस गतिविधि / सेवा के जीवन से जुड़ा हुआ है जिसमें आपने इसे पंजीकृत किया था। कुछ प्रसारणों के लिए, यह वास्तव में एक नई ऐप प्रक्रिया बनाने का मतलब नहीं है, अगर यह मौजूद नहीं है, या कुछ सुरक्षा, प्रदर्शन, आदि प्रभाव, और इस तरह आप केवल कोड में रिसीवर रजिस्टर कर सकते हैं।

HEADSET_PLUG ब्रॉडकास्ट के लिए, ऐसा लगता है कि आपका पहले से चलने वाला ऐप UI, वॉल्यूम इत्यादि में ऐप-विशिष्ट समायोजन करने के लिए इसे प्राप्त कर सकता है। यदि आपका ऐप नहीं चल रहा है, तो आपको वास्तव में हेडफ़ोन को अनप्लग किए जाने के बारे में परवाह नहीं करना चाहिए ।

AFAIK, कोई भी स्थान नहीं है, यह जानकारी सभी प्रसारणों के लिए संक्षेप में है, लेकिन प्रत्येक आशय के जावाडाक में पंजीकरण करने और उसका उपयोग करने के बारे में एक टिप्पणी होनी चाहिए, लेकिन जाहिरा तौर पर स्थानों में इसकी कमी है अगर आप Intent.FLAG_RECEIVER_REGISTERED_ONLY के लिए एंड्रॉइड स्रोत ट्री का इस्तेमाल करते हैं, तो आपको एक सूची संकलित करने में सक्षम होना चाहिए।

जैसा सामान्य प्रसारण रिसीवर मैनिफ़ेस्ट फ़ाइल एंड्रॉइडमैंनिस्ट.एक्सएमएल में कॉन्फ़िगर किया जा सकता है। इस तरह से कॉन्फ़िगर किया गया एक ब्रॉडकास्ट रिसीवर जिसे स्टेटिक पंजीकृत है

आप अपने रिसीवर को मेनिफेस्ट फाइल में तत्व का उपयोग करके पंजीकृत कर सकते हैं:

 <receiver android:name=".ConnectivityChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

नेस्टेड तत्व का उपयोग घटना को निर्दिष्ट करने के लिए किया जाता है, जिस पर रिसीवर को प्रतिक्रिया चाहिए।

Dyanmic प्रसारण प्राप्तकर्ता

एक विकल्प के रूप में आप अपने ब्रॉडकास्ट रिसीवर कार्यान्वयन को अपने कोड में गतिशील रूप से पंजीकृत कर सकते हैं। आपको अपने संदर्भ ऑब्जेक्ट पर रजिस्टर रिसीवर () विधि को कॉल करना होगा।

रजिस्टर रिसीवर () विधि दो मापदंडों लेता है:

रजिस्टर रिसीवर () विधि के तर्क

  • रिसीवर: ब्रॉडकास्ट रिसीवर जो आप रजिस्टर करना चाहते हैं
  • फ़िल्टर: IntentFilter ऑब्जेक्ट जो निर्दिष्ट करता है कि आपके रिसीवर को किस घटना को सुनना चाहिए।

जब आप अपने रिसीवर को इस तरह से पंजीकृत करते हैं, तो यह तब तक रहता है जब तक घटक रहता है और एंड्रॉइड इस रिसीवर को घटनाएं भेजता है जब तक कि निर्माण घटक नष्ट नहीं हो जाता।

जीवनचर्या को सही ढंग से संभालने के लिए यह आपके काम है इस प्रकार जब आप एक रिसीवर को गतिशील रूप से जोड़ते हैं, तो अपनी गतिविधि की ऑन-पॉज़ () विधि में एक ही रिसीवर को अपंजीकृत करने के लिए ध्यान रखें!

मैं सुझाव देता हूं कि रिसीवर को आपकी गतिविधि की रीस्यूम () पद्धति में रजिस्टर करें और इसे अपने ऑन-पॉज़ () विधि में पंजीकृत करें।

 @Override protected void onPause() { unregisterReceiver(mReceiver); super.onPause(); } @Override protected void onResume() { this.mReceiver = new ConnectivityChangeReceiver(); registerReceiver( this.mReceiver, new IntentFilter( ConnectivityManager.CONNECTIVITY_ACTION)); super.onResume(); } 

रजिस्टर करने के लिए कौन से विधि का उपयोग करें

आपके ब्रॉडकास्ट रिसीवर को पंजीकृत करने के लिए कौन सी विधि का उपयोग सिस्टम ईवेंट के साथ आपकी ऐप पर निर्भर करता है मुझे लगता है कि मूलतः दो कारण हैं क्योंकि आपका ऐप सिस्टम-विस्तृत ईवेंट के बारे में जानना चाहता है:

  • आपका ऐप इन कार्यक्रमों के आसपास कुछ प्रकार की सेवा प्रदान करता है
  • आपका ऐप राज्य परिवर्तनों के प्रति कृपापूर्वक प्रतिक्रिया करना चाहता है

पहली श्रेणी के उदाहरण ऐसे ऐप्स हैं जो डिवाइस बूट होने पर काम करने की आवश्यकता होती है या जब भी कोई ऐप इंस्टॉल हो जाता है तब उसे किसी तरह का काम शुरू करना चाहिए। इन प्रकार के ऐप्स के लिए बैटरी विजेट प्रो या एप 2 एसडी अच्छे उदाहरण हैं इस प्रकार के लिए आपको मेनिफेस्ट फाइल में ब्रॉडकास्ट रिसीवर रजिस्टर करना होगा।

दूसरी श्रेणी के उदाहरण, ऐसी घटनाएं हैं जो आपके ऐप पर भरोसा कर सकते हैं। कहें कि आपका ऐप किसी स्थापित ब्लूटूथ कनेक्शन पर निर्भर करता है। आपको एक राज्य परिवर्तन पर प्रतिक्रिया करना होगा – लेकिन केवल जब आपका ऐप सक्रिय है इस मामले में एक स्थिर रूप से पंजीकृत प्रसारण रिसीवर की कोई ज़रूरत नहीं है। एक गतिशील रूप से पंजीकृत एक अधिक उचित होगा

कुछ ऐसी घटनाएं भी हैं जिनके लिए आपको स्थैतिक रूप से पंजीकरण करने की अनुमति नहीं है। इसके लिए एक उदाहरण Intent.ACTION_TIME_TICK ईवेंट है जो हर मिनट प्रसारित होता है। यह एक बुद्धिमान निर्णय है क्योंकि एक स्थिर रिसीवर बेकार रूप से बैटरी से निकलता है।