2015-08-12 11 views
13

निष्पादित नहीं करता है इसलिए मुझे ब्रॉडकास्ट रिसीवर और अलार्ममेनगर मिला है।अलार्ममेनगर हमेशा ब्रॉडकास्ट रिसीवर

चलो कहते हैं कि मैं तो जैसे विचाराधीन उद्देश्य बनाएँ:

Intent i; 
i = new Intent(context, MyReceiver.class); 
i.setAction(MyReceiver.ACTION_1); 
i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 
pendingIntent1 = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_UPDATE_CURRENT); 

i = new Intent(context, MyReceiver.class); 
i.setAction(MyReceiver.ACTION_2); 
i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 
pendingIntent2 = PendingIntent.getBroadcast(context, 2, i, PendingIntent.FLAG_UPDATE_CURRENT); 

और इसलिए तरह अलार्म अनुसूची:

now = SystemClock.elapsedRealtime(); 
long time1 = now + 10 * 1000; 
long time2 = time1 + 60 * 1000; 

am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time1, pendingIntent1); 
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time2, pendingIntent2); 

मैं अब कि मेरे प्रसारण रिसीवर काफी मज़बूती से ACTION_1 के लिए प्रसारण हो जाता है का सामना कर रहा हूँ , जबकि ACTION_2 अक्सर वितरित नहीं किया जा रहा है। तो onReceive कार्रवाई ACTION_2 को धारण करने के इरादे से शायद ही कभी या कभी निष्पादित नहीं होता है। वह कैसे आता है मैंने सोचा, *_WAKEUP सुनिश्चित करता है कि प्रसारण भी वैसे भी वितरित किए जा रहे हैं?

[अपडेट 09/15/2015] - परीक्षण उद्देश्यों के लिए मैं अपने onReceive विधि में एक लॉग संदेश मुद्रित करने का प्रयास कर रहा हूं। अभी भी काम नहीं कर रहा है। - मैंने अब AlarmManager पर setExact का उपयोग करने का प्रयास किया है। अभी भी काम नहीं कर रहा है। - मैंने WakefulBroadcastReceiver का उपयोग करने का भी प्रयास किया है। अभी भी काम नहीं कर रहा है। - हालांकि, मुझे पता चला है कि बैटरी चार्ज स्थिति में डिवाइस विश्वसनीय रूप से जागता है। इस समस्या का कारण क्या हो सकता है? मैंने हर जगह पढ़ा है कि लंबित इरादे से अलार्म मैनेजर द्वारा ट्रिगर किए जाने पर प्रसारण रिसीवर को निष्पादित करने की गारंटी है (और onReceive में बहुत अधिक चीज़ें नहीं कर रही हैं)। क्या मेरे पास शायद मेरे फोन पर कुछ आक्रामक ऊर्जा बचत नीति है जो मैं वास्तव में काम नहीं कर सकता (बिना लंबे समय तक जागने के लॉक प्राप्त किए, टिप्पणियां देख सकता हूं)?

[अपडेट 09/19/2015] मैंने Google Play पर कुछ अलार्म घड़ी ऐप (https://play.google.com/store/apps/details?id=com.alarmclock.xtreme.free) का परीक्षण किया है और यह विश्वसनीय रूप से फोन को भी जगा नहीं देता है। मुझे लगता है, यह वास्तव में एक बग है और मेरी गलती नहीं है। मुझे लगता है कि मैं जागने के लॉक समाधान के साथ रहूँगा, मुझे लगता है।

+0

'शोएट'' का मूल्य क्या है? –

+0

ओप क्षमा करें, तय करें। यह 'समय 1 'होना था। स्क्रीन मूल रूप से एक संवाद (एक पारदर्शी गतिविधि में) दिखाने के बारे में है जब स्क्रीन बंद हो गई थी (यहां 10 सेकंड) और स्क्रीन को बहुत लंबे समय तक बंद कर दिया गया था (यहां 10 + 60 = 70 सेकेंड)। – flxapps

+0

मैंने अब जागने की लॉक प्राप्त करके अपनी समस्या हल कर ली है: 'wakeLock.acquire (time2 - अब + 5000);' (फ़ोन को जागृत रखना - ऊपरी उदाहरण में - 70 सेकंड प्लस 5 सेकेंड बफर के रूप में) - हालांकि, मुझे लगता है कि यह एक बदसूरत समाधान है। तुम क्या सोचते हो? क्या यह वैध या बहुत गंदा है, शायद समस्याएं पैदा कर रहा है? – flxapps

उत्तर

6

मुझे एक ही समस्या का सामना करना पड़ा, मुझे मिला समाधान केवल कार्रवाई स्ट्रिंग द्वारा इरादा बनाना है, और उस रिसीवर कार्रवाई को मैनिफेस्ट में पंजीकृत करना है। कुछ इस तरह के इरादे बदलने का प्रयास करें:

i = new Intent("com.app.ACTION_ONE"); 

फिर अपने मैनिफ़ेस्ट फ़ाइल में निम्नलिखित अपने रिसीवर के लिए जोड़:

<intent-filter> 
    <action android:name="com.app.ACTION_ONE" /> 
</intent-filter> 

मेरा अनुमान है अगर तुम न रजिस्टर कम से कम 1 recevier करने के लिए कार्रवाई है वह आवेदन प्रक्रिया समाप्त होने पर बस मर जाता है।

आशा है कि यह काम करता है, शुभकामनाएँ।

+0

अभी भी काम नहीं कर रहा है। :/एक और पक्ष नोट: यदि मैं उदाहरण के लिए पहला प्रसारण शेड्यूल करता हूं स्क्रीन बंद करने के 3 सेकंड बाद, स्क्रीन को फिर से चालू करने के बाद इसे अक्सर निष्पादित किया जाता है (हालांकि मैं पहले से ही 10 सेकंड की तरह इंतजार कर चुका हूं)। – flxapps

2

क्या आपने ब्रॉडकास्ट रिसीवर (या मैनिफेस्ट से) पंजीकृत किया था?

registerReceiver(new MyReceiver(), new IntentFilter(MyReceiver.class.getName())); 

मैं पिछली बार लगभग एक ही तरीके का इस्तेमाल किया, लेकिन AlarmManager.RTC_WAKEUP साथ - अगर आप नहीं गहरी नींद से जगाने के लिए उपकरण, जैसे AlarmManager.RTC

long time = System.currentTimeMillis() + 10*1000; 
alarmMgr.set(AlarmManager.RTC_WAKEUP, time, alarmIntent); 

alarmIntent उपयोग करना चाहते हैं:

alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent(MyReceiver.class.getName()), PendingIntent.FLAG_CANCEL_CURRENT); 
1

कुछ चीजें हैं जो उपयोगी हो सकती हैं:

  1. आप AlarmManager.set() विधि डायन का उपयोग कर रहे प्रसव के समय की गारंटी नहीं दे नहीं करता है, यदि आप अलार्म करना चाहते हैं सही समय उपयोग AlarmManager.setExact()

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

    Intent intent = new Intent(Contants.Action1); 
    
  3. अगर रिसीवर dynamicly पंजीकृत यह केवल उद्देश्य प्राप्त कर सकते हैं, जबकि पर थ्रेड: रिसीवर मामले में मैं का उपयोग करने की सलाह देते हैं वह क्रोधित था जिंदा है।

  4. एंड्रॉइड के विभिन्न संस्करण अलार्म को थोड़ा अलग तरीके से अनुकूलित करने का प्रयास कर रहे हैं, लेकिन लक्ष्य बेहतर बैटरी प्रदर्शन को प्राप्त करने के लिए एक ही समय में यथासंभव कई अलार्म ट्रिगर करना है।

यह सब काफी भ्रमित हो सकता है। लेकिन अगर रिसीवर सही तरीके से पंजीकृत है, तो इरादे की गारंटी दी जाती है।

+0

हैलो, आपके उत्तर के लिए धन्यवाद। 1. मैंने पहले से ही 'BuildExact' का उपयोग करके' Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT' का उपयोग करके अपना कोड बदल दिया है। 2. मैंने पहले से ही अपना नया कोड 'नया इरादा (MyReceiver.ACTION_1) का उपयोग करके बदल दिया है; '। 3. मेरा रिसीवर वर्तमान में मैनिफेस्ट में परिभाषित किया गया है (मैंने दोनों की कोशिश की)।~~ ठीक है, मेरा अनुभव, हालांकि, इस बिंदु पर है, कि वे सही ढंग से वितरित होने की गारंटी नहीं है। मैं वर्तमान में सोनी से मेरी समस्या के लिए कुछ सख्त ऊर्जा बचत नीति को दोषी ठहराता हूं, लेकिन मुझे यकीन नहीं है। मेरा संपादन भी देखें: मैं अलार्म ऐप के साथ दुर्व्यवहार का पुनरुत्पादन कर सकता हूं। – flxapps

0

अपने सोनी उपकरणों पर "सहनशक्ति मोड" के लिए सेटिंग्स पर नज़र डालें। सहनशक्ति मोड को अक्षम करने का प्रयास करें या स्टेमिना मोड चालू होने पर अनुमत ऐप्स की श्वेतसूची में अपना ऐप जोड़ें।

उम्मीद है कि इससे मदद मिलती है।

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