खोज…


एक बाद में एक इरादे चलाएं

  1. एक रिसीवर बनाएँ। यह वर्ग अभिप्राय प्राप्त कर लेगा और आपको उसकी इच्छानुसार संभाल देगा।
public class AlarmReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Handle intent
        int reqCode = intent.getExtras().getInt("requestCode");
        ...
    }
}
  1. AlarmManager को एक इरादा दें। यह उदाहरण 1 मिनट के बाद अलार्मराइवर को भेजे जाने के इरादे को ट्रिगर करेगा।
final int requestCode = 1337;
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set( AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60000 , pendingIntent );

कैसे एक अलार्म रद्द करने के लिए

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

अलार्ममैन द्वारा एक इरादे के बराबर माना जाता है :

यदि उनकी क्रिया, डेटा, प्रकार, वर्ग और श्रेणियां समान हैं। यह इंटेंट्स में शामिल किसी भी अतिरिक्त डेटा की तुलना नहीं करता है।

आमतौर पर प्रत्येक अलार्म के लिए अनुरोध कोड को एक स्थिरांक के रूप में परिभाषित किया जाता है:

public static final int requestCode = 9999;

तो, इस तरह से स्थापित एक साधारण अलार्म के लिए:

Intent intent  = new Intent(this, AlarmReceiver.class);
intent.setAction("SomeAction");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetTimeInMillis, pendingIntent);

यहां बताया गया है कि आप एक नया लंबित संदर्भ कैसे बना सकते हैं, जिसका उपयोग आप अलार्म को नए अलार्म मैनजर संदर्भ के साथ रद्द करने के लिए कर सकते हैं:

Intent intent  = new Intent(this, AlarmReceiver.class);
intent.setAction("SomeAction");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_NO_CREATE);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
if(pendingIntent != null) {
    alarmManager.cancel(pendingIntent);
}

सभी Android संस्करणों पर सटीक अलार्म बनाना

समय के साथ अधिक से अधिक बैटरी अनुकूलन एंड्रॉइड सिस्टम में डाले जाने के साथ, AlarmManager के तरीके भी काफी बदल गए हैं (अधिक उदार समय की अनुमति देने के लिए)। हालाँकि, कुछ अनुप्रयोगों के लिए अभी भी सभी Android संस्करणों पर यथासंभव सटीक होना आवश्यक है। एक सहायक PendingIntent करने के लिए निम्न सहायक सभी प्लेटफार्मों पर उपलब्ध सबसे सटीक विधि का उपयोग करता है:

public static void setExactAndAllowWhileIdle(AlarmManager alarmManager, int type, long triggerAtMillis, PendingIntent operation) {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
        alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
    } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        alarmManager.setExact(type, triggerAtMillis, operation);
    } else {
        alarmManager.set(type, triggerAtMillis, operation);
    }
}

API23 + डोज़ मोड अलार्ममैन के साथ हस्तक्षेप करता है

एंड्रॉइड 6 (एपीआई 23) ने डोज़ मोड पेश किया, जो अलार्ममैन के साथ हस्तक्षेप करता है। यह अलार्म को संभालने के लिए कुछ रखरखाव विंडो का उपयोग करता है, इसलिए भले ही आपने setExactAndAllowWhileIdle() उपयोग किया हो, आप यह सुनिश्चित नहीं कर सकते कि आपका अलार्म समय के वांछित बिंदु पर फायर करता है।

आप अपने फ़ोन की सेटिंग ( Settings/General/Battery & power saving/Battery usage/Ignore optimizations या इसी तरह की Settings/General/Battery & power saving/Battery usage/Ignore optimizations ) का उपयोग करके अपने ऐप के लिए इस व्यवहार को बंद कर सकते हैं)

अपने एप्लिकेशन के अंदर आप इस सेटिंग की जांच कर सकते हैं ...

String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName)) {
   // your app is ignoring Doze battery optimization
}

... और अंत में संबंधित सेटिंग्स डायलॉग दिखाएं:

Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow