2011-08-10 35 views
21

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

+0

क्या आपको इस दौरान उत्तर या कोई अतिरिक्त जानकारी मिली? यदि ऐसा है, तो कृपया उन्हें पोस्ट करें, क्योंकि मुझे वर्तमान में एक ही समस्या है। –

+0

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

+0

यह बीएलई 4.x, या नियमित ब्लूटूथ है? – zrgiu

उत्तर

-2

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

तो पृष्ठभूमि प्रक्रिया कुछ बिजली और बैटरी नाली का उपभोग करेगी और यह एंड्रॉइड को आंशिक रूप से जागृत रखने के लिए भी जिम्मेदार है (आंशिक रूप से इसकी पृष्ठभूमि प्रक्रिया के रूप में और आप हमेशा यह नियंत्रित कर सकते हैं कि यह आने वाले कनेक्शन के लिए कितनी बार जांच करता है)। आम तौर पर यह पृष्ठभूमि प्रक्रिया हमेशा नहीं चलती है, केवल तब चलती है जब एंड्रॉइड में ब्लूटूथ चालू होता है। तो आप एक थ्रेड भी बना सकते हैं जो केवल तब चलाना चाहिए जब एंड्रॉइड में ब्लूटूथ चालू हो जाए, अन्यथा इसे सोना चाहिए।

+0

मैंने अभी इसका परीक्षण किया है, और ऐसा लगता है कि गैलेक्सी नेक्सस ("सर्वर" के रूप में) पर, आने वाला ब्लूटूथ कनेक्शन डिवाइस को जगाता है। (वाईफाई आईपी को आईसीएमपी पिंग भेजने के लिए भी जाता है)। –

+0

नेक्सस 4 पर यह भी ऐसा लगता है, लेकिन मैं 100% निश्चित नहीं हो सकता क्योंकि डिवाइस किसी भी स्पष्ट कारण के लिए जागने के लिए प्यार करता है। कम से कम यह हमेशा जरूरी होने पर जाग गया। एंड्रॉइड 2.3.3 डिवाइस (गैलेक्सी ऐस) के साथ, यह दोनों पक्षों पर एक दृश्य जोड़ी अनुरोध को ट्रिगर करता है, जिससे इसे बेकार बना दिया जाता है (और इस प्रकार वेक अप परीक्षण करने के लिए व्यर्थ)। –

1

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

+0

बीएलई के बारे में भी यही सच है। अगर आप कनेक्टगैट() को ऑटोकनेक्ट = सत्य के साथ कहते हैं, जब परिधीय कनेक्शन स्वीकार करता है तो फ़ोन जाग जाएगा। कोई wakelock आवश्यक है। मुझे यह जांचने के लिए परेशान नहीं है कि क्या यह व्यवहार सीपीयू को गहरी नींद में जाने से रोकता है –

+1

बस स्पष्ट होने के लिए, एक पृष्ठभूमि सेवा भी ठीक काम करेगी, खासकर अगर इसे स्टिकी बनाया गया हो। डिवाइस अभी भी जाग जाएगा। अग्रभूमि का उपयोग करने का कारण कम संसाधनों के कारण मारे जाने का सबसे अच्छा मौका देना होगा –

0

यदि आप इसे ऊपर या ऊपर marshmallow के लिए लक्षित लक्ष्य के लिए विकसित कर रहे हैं, तो ऐसी स्थितियों का इलाज करने के लिए DOZE मोड है। फिर आपको इन चीजों के बारे में चिंता करने की ज़रूरत नहीं है। यह उचित तंत्र के साथ WAKE_LOCK को संभाल सकता है।

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