मैं android में नया हूं। मैं अपने आवेदन के साथ लगभग 3 सप्ताह संघर्ष करता हूं। मुझे सामान्य मोड और sleep mode में पैकेट भेजना और प्राप्त करना होगा। My app डेटा का 5 सेकंड का आदान-प्रदान करना चाहिए। मैंने alarmmanager का उपयोग करने की कोशिश की, लेकिन एंड्रॉइड 5 पर यह काम नहीं कर रहा है। android 5 पर एक अंतराल इसे 60 सेकंड में बदल देता है। इस तरह के समाधान से बैटरी जल्दी खराब हो जाती है। जब मैं सामान्य asynctask का उपयोग करता हूं, न कि IntentService, तो यह तभी काम करता है जब स्क्रीन ON और app दिखाई दे। जब ऐप छिपा होता है या मैं पावर OFF क्लिक करता हूं, तब डेटा का आदान-प्रदान काम करना बंद कर देता है। सबसे अच्छा उपाय क्या है?

1
SeaDog 25 नवम्बर 2015, 17:58

2 जवाब

सबसे बढ़िया उत्तर

यहां तक कि RTC_WAKEUP कई बार मदद नहीं करता है।

समाधान जो मेरे ऐप के लिए काम करता है जब डिवाइस गहरी नींद मोड में होता है:
अलार्म मैनजर के साथ संयुक्त WakefulBroadcastReceiver का उपयोग करें।

सेवा startWakefulService () द्वारा शुरू की गई है और जब यह समाप्त हो जाती है, तो यह पूरा लॉक को कॉल करता है जो कि FullWakefulIntent (आशय) कहकर जारी करता है। इसलिए डिवाइस को वापस सोने की अनुमति दी जाएगी।

मैं कोई कोड नहीं जोड़ रहा हूं। अलार्म मैनजर के साथ वेकफुलब्रोडकास्टसीवर का उपयोग करने के तरीके के उदाहरणों के लिए खोजें। यहां तक कि WakefulBroadcastReceiver डॉक्टर के पास कुछ टेम्पलेट कोड हैं।

इसके अलावा अलार्म की फ्रीक्वेंसी को कम करें ताकि आप इतनी बैटरी निकलने से बच सकें।

1
cgr 25 अक्टूबर 2018, 14:00

आप किसी विशेष समय पर डिवाइस को जगाने के लिए AlarmManager वर्ग का उपयोग कर सकते हैं, फिर आप जो चाहें उस अंतराल पर एक ऑपरेशन को आग लगा सकते हैं। कोड यहां पाए गए डॉक्स से:

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);

// setRepeating() lets you specify a precise custom interval--in this case,
// 20 minutes.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
1000 * 60 * 20, alarmIntent);

इस ब्लॉक की अंतिम पंक्ति पर ध्यान दें। आप जो भी अंतराल चाहते हैं, उसे सेट करने के लिए आप setRepeating() विधि का उपयोग कर सकते हैं।

0
NoChinDeluxe 25 नवम्बर 2015, 15:15