दिलचस्प पोस्ट
Unraveling कोणीय 2 किताब, अध्याय 1, उदाहरण 5 अमान्य UTF-8 वर्णों के उपयोगकर्ता इनपुट को कैसे नियंत्रित करें? यूआईएलबल में कस्टम स्थापित फ़ॉन्ट ठीक से प्रदर्शित नहीं है जीआईटी रिपॉजिटरी से अप्रयुक्त ऑब्जेक्ट कैसे निकालें? GitHub की तरह Git सर्वर? $ नोटेशन का उपयोग करते हुए डेटा फ्रेम स्तंभ का चयन करने के लिए स्ट्रिंग चर का उपयोग कैसे करें सी # में डुबकी प्रकार की कमी SQL सर्वर 2005 से डेटा को MySQL से निर्यात कैसे करें अजगर अंडा फ़ाइल कैसे बनाएं उपयोगकर्ता को एंड्रॉइड के लिए एफबी एसडीके 4.0 के साथ लॉग ऑन करने की जांच कैसे करें? जब सी + + मैक्रोज़ फायदेमंद होते हैं? अनुकरण "डबल" 2 "फ्लोट" एस का उपयोग करना कैसे POSIX श में स्क्रिप्ट निर्देशिका प्राप्त करने के लिए? त्रुटि: "एडीबी कनेक्शन त्रुटि: रिमोट होस्ट द्वारा एक मौजूदा कनेक्शन जबरन बंद किया गया था" मैं DateTimePicker नियंत्रण पर कुछ दिनांक कैसे अक्षम करूं?

अलार्ममैनेजर गलत समय पर अलार्म चलाता है

अलार्म के परिणामस्वरूप एक अधिसूचना को आगाने के लिए उपयोग की जाने वाली अधिसूचना सेवा का निर्माण करने के लिए मैंने हर चीज का प्रबंधन किया। दुर्भाग्य से, अलार्म मैनेजर का उपयोग कर अलार्म सेट करना सही काम नहीं करता है। यह कई मिनट बाद में आग लगती है (ठीक समय नहीं, जो टाइमज़न समस्या का संकेत देगा)। आवर्ती अवधि 1 सप्ताह है, इसलिए मैंने निरंतर INTERVAL_DAY का उपयोग किया और इसे 7 के साथ गुणा किया। यह सुनिश्चित करने के लिए कि एक लंबित व्यक्ति अन्य की जगह नहीं लेता है, मैं दिन के लिए दूसरा पैरामीटर pendingIntent.getService () के रूप में पास करता हूं। मैं लॉगिंग करके अलार्म के लिए समय की शुद्धता की जांच करता हूं:

Log.d(TAG, "next alarm " + df.format(cal.getTime())); 

क्या सभी अलार्म सेट करने के लिए वास्तव में कोई रास्ता नहीं है – कम से कम मेरे खुद के ऐप से? मेरा मानना ​​है कि यह त्रुटि को ट्रैक करने का एकमात्र तरीका है

मेरा कोड:

 cal.setTimeInMillis(System.currentTimeMillis()); cal.add(Calendar.DATE, 1); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); Log.d(TAG, "next alarm " + df.format(cal.getTime())); Intent showNotificationIntent = new Intent(context, NotificationService.class); dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0); getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), INTERVAL_WEEK, alarmIntent); 

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

इसी तरह के सवालों के कई जवाब पढ़ने के बाद भी (मैं एक डुप्लिकेट सवाल बनाने का इरादा नहीं है), मैं समस्या को खोजने में कामयाब नहीं है।

वेब के समाधान से एकत्रित समाधान "अलार्ममैनेजर गलत समय पर अलार्म चलाता है"

एपीआई के स्तर के लिए 1 9 से नीचे आपको अलार्म AlarmManager.setRepeating() उपयोग करना चाहिए और आपके अलार्म निश्चित समय पर बिल्कुल ट्रिगर करेगा। आप एपीआई स्तरों पर 1 9 और इससे ऊपर अब काम नहीं करेंगे। एंड्रॉइड में बदलाव हुआ था ताकि सभी दोहराए जाने वाले अलार्म अयोग्य हो। इसलिए यदि आप सटीक दोहराए जाने वाले अलार्म प्राप्त करना चाहते हैं तो आपको अलार्म AlarmManager.setExact() साथ अलार्म शेड्यूल करना चाहिए और फिर जब अगले सप्ताह अलार्म ट्रिगर करता है और हर सप्ताह ऐसा होता है

सेटइंक्सएक्ट रीपीटिंग के कारण सेट पुन: प्रयोग करें और इसे सही समय पर संसाधित किया जाएगा।

के बजाय:

 setInexactRepeating 

उपयोग

 setRepeating 

setInexactRepeating, ओएस और बैटरी अनुकूल है, यह अलार्म पर प्राप्त किए जाने वाले सभी कार्यों को एक साथ बैच करता है और एक-एक के माध्यम से काम करता है, जबकि सेट के रूप में सेटिंग तुरंत अलार्म को निकालती है

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

एक छोटा सा उदाहरण:

यह कोड काम कर रहा है यह फोन हर 10 मिनट तक बंद हो जाता है जब तक फोन बंद नहीं हो जाता।

Manifest.xml में जोड़ें:

 ... <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> ... <receiver android:process=":remote" android:name="Alarm"></receiver> ... 

कोड:

  package YourPackage; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.PowerManager; import android.widget.Toast; public class Alarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); wl.acquire(); // Put here YOUR code. Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example wl.release(); } public void SetAlarm(Context context) { AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute } public void CancelAlarm(Context context) { Intent intent = new Intent(context, Alarm.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } } 

सेवा से अलार्म सेट करें:

 package YourPackage; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; public class YourService extends Service { Alarm alarm = new Alarm(); public void onCreate() { super.onCreate(); } public void onStart(Context context,Intent intent, int startId) { alarm.SetAlarm(context); } @Override public IBinder onBind(Intent intent) { return null; } } 

यदि आप फ़ोन बूट समय पर दोहराए जाने वाले अलार्म सेट करना चाहते हैं:

Manifest.xml को अनुमति जोड़ें:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> ... <receiver android:name=".AutoStart"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver> ... 

और नया वर्ग बनाएं:

 package YourPackage; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class AutoStart extends BroadcastReceiver { Alarm alarm = new Alarm(); @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { alarm.SetAlarm(context); } } }