2012-09-19 10 views
8

यहाँ कोड है कि मैं अपने विजेट के लिए अलार्म सेट करने के लिए इस्तेमाल होता है:PendingIntent अनुसूचित उपयोग कर AlarmManager.RTC प्रकार अभी भी स्लीप मोड में शुरू हो जाती है

private static void setAlarm(Context context) { 
    Intent myIntent = new Intent(context, Widget.class); 
    myIntent.setAction(AUTO_UPDATE); 
    PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Service.ALARM_SERVICE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 8); 
    alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
      pendingIntent); 
} 

लेकिन समस्या यह है कि यहां तक ​​कि स्लीप मोड में, onReceive() अभी भी इरादे से ट्रिगर किया गया है।

setRepeating के बजाय setInexactRepeating का उपयोग करने के बाद, कॉल के बीच देरी नींद मोड में 1 मिनट तक बढ़ जाती है, लेकिन यह अभी भी बैटरी उपभोग कर रही है।

+0

आपका प्रश्न क्या है? – HitOdessit

+1

'AlarmManager.RTC' को नींद मोड में डिवाइस का आह्वान नहीं करना चाहिए! आक्रमण से बचने के लिए मुझे क्या करना चाहिए? – SAbbasizadeh

+0

एंड्रॉइड ओएस संस्करण और डिवाइस/अनुकरणक जो आप अपने कोड का परीक्षण कर रहे हैं? – HitOdessit

उत्तर

1

मेरा मानना ​​है कि आप कैलेंडर के समय के 8 सेकंड बाद ट्रिगर करने के लिए अलार्म सेट कर रहे हैं, जिसे आपने वर्तमान समय से 8 सेकंड आगे सेट किया है .. इसलिए आप तुरंत ट्रिगर करने के लिए अलार्म सेट कर रहे हैं।

मुझे कोई कारण नहीं दिख रहा है कि आपको यहां कैलेंडर की आवश्यकता है। कैलेंडर सिर्फ भविष्य में यहां समय 8 सेकंड ट्रैक करने के लिए प्रयोग किया जाता है:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.add(Calendar.SECOND, 8); 

अलार्म यहाँ हर 8 सेकंड को गति प्रदान करने के लिए बनाया गया है:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
     pendingIntent); 

अलार्म हर आठ सेकंड गति प्रदान करने के लिए जारी है।

मैं बदलने का प्रयास होगा:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000, 
     pendingIntent); 

करने के लिए:

alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 8000, 
     pendingIntent); 

आप समस्याएं आ रही हैं, तो शायद अंतराल समस्या है। यह देखने के लिए कि क्या मामला है, setRepeating()set() को बदलने का प्रयास करें।

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