2011-09-16 11 views
7

से वेक सेवा https://github.com/commonsguy/cwac-wakeful डेमो में, ऑन अलार्मरसीवर (ब्रॉडकास्ट रिसीवर) ऑनसेसिव() विधि को अलार्म के जवाब में बुलाया जाता है। ऑनसेसिव() विधि सेवा शुरू करती है। दो इरादों का उपयोग किया जाता है, जिसे ब्रॉडकास्ट रिसीवर द्वारा प्राप्त किया जाता है और एक सेवा द्वारा किया जाता है। यह अधिक जटिल लगता है कि यह होना चाहिए, क्यों न केवल सेवा को AlamManager से इरादा प्राप्त है?सीधे अलार्ममेनगर

मैं समझता हूं कि फ़ोन को सोने की गारंटी नहीं है जबकि रिसीव() निष्पादित हो रहा है यानी यह एक वेक लॉक के साथ लपेटा गया है। मुझे यकीन नहीं है कि सेवा वर्ग कोई समान गारंटी प्रदान करता है या नहीं।

क्या सेवा को सीधे अलार्म से शुरू करने का कोई तरीका है, जबकि यह गारंटी है कि फोन नींद से जाग जाएगा और जागने तक लॉक नहीं किया जा सकता है?

उत्तर

14

यह अधिक जटिल लगता है कि यह होना चाहिए, क्यों न केवल सेवा को AlamManager से इरादा प्राप्त है?

क्योंकि एंड्रॉयड गारंटी नहीं है कि इस उपकरण में एक getService()PendingIntent के लिए जाग काफी देर तक रहना होगा लागू किया जा करने के लिए। getBroadcast()PendingIntent के लिए गारंटी है - एंड्रॉइड यह सुनिश्चित करता है कि डिवाइस onReceive() कॉल की अवधि के लिए जागृत रहेगा (WakeLock के माध्यम से)।

मेरा विश्वास करो, मेरी इच्छा है कि हम इसे छोड़ सकें।

+0

ठीक है, प्रतिक्रिया – alexbirkett

+0

ओह के लिए धन्यवाद, यह बहुत अच्छा है - मैं एक ही चीज़ के बारे में सोच रहा था - स्पष्ट रूप से [एपीआई नमूनों से सरल अलार्म उदाहरण में यह चिंता नहीं है] (http://stackoverflow.com/a/ 14094314/281545) - या क्या मुझे कुछ याद आ रही है? –

+1

@Mr_and_Mrs_D: उस नमूने में इतने सारे मुद्दे हैं, यह भी मजाकिया नहीं है। किसी दिन, उम्मीद है कि मैं इसे बदल दूंगा। – CommonsWare