मुझे AlarmManager
सेट होने के 20 मिनट बाद कोड के एक ब्लॉक को ट्रिगर करना होगा ।
क्या कोई मुझे someone AlarmManager
Android में उपयोग करने के लिए नमूना कोड दिखा सकता है?
मैं कुछ दिनों से कुछ कोड के साथ खेल रहा हूं और यह सिर्फ काम नहीं करेगा।
जवाबों:
"कुछ सैंपल कोड" इतना आसान नहीं है जब यह आता है AlarmManager
।
यहाँ एक स्निपेट दिखाया गया है AlarmManager
:
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
इस उदाहरण में, मैं उपयोग कर रहा हूं setRepeating()
। यदि आप एक-शॉट अलार्म चाहते हैं, तो आप बस उपयोग करेंगे set()
। जैसा कि आप प्रारंभिक पैरामीटर में उपयोग करते हैं उसी समय आधार में अलार्म शुरू करने के लिए समय देना सुनिश्चित करें set()
। ऊपर मेरे उदाहरण में, मैं उपयोग कर रहा हूं AlarmManager.ELAPSED_REALTIME_WAKEUP
, इसलिए मेरा समय आधार है SystemClock.elapsedRealtime()
।
यहां इस तकनीक को दिखाने वाला एक बड़ा नमूना प्रोजेक्ट है ।
Android नमूना कोड में कुछ अच्छे उदाहरण हैं
। \ Android-SDK \ नमूने \ एंड्रॉयड-10 \ ApiDemos \ src \ कॉम \ उदाहरण \ एंड्रॉयड \ apis \ एप्लिकेशन
जिन्हें जांचना है:
सबसे पहले, आपको एक रिसीवर चाहिए, कुछ ऐसा जो आपके अलार्म को सुन सकता है जब इसे ट्रिगर किया जाता है। अपने AndroidManifest.xml फ़ाइल में निम्न जोड़ें
<receiver android:name=".MyAlarmReceiver" />
फिर, निम्न वर्ग बनाएं
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
}
}
फिर, अलार्म को ट्रिगर करने के लिए, निम्न का उपयोग करें (उदाहरण के लिए अपनी मुख्य गतिविधि में):
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 30);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
।
या, बेहतर, अभी तक, एक वर्ग बनाएं जो इसे संभालता है और इसे इस तरह से उपयोग करता है
Bundle bundle = new Bundle();
// add extras here..
MyAlarm alarm = new MyAlarm(this, bundle, 30);
इस तरह, आपके पास यह सब एक जगह है (संपादित करना न भूलें AndroidManifest.xml
)
public class MyAlarm extends BroadcastReceiver {
private final String REMINDER_BUNDLE = "MyReminderBundle";
// this constructor is called by the alarm manager.
public MyAlarm(){ }
// you can use this constructor to create the alarm.
// Just pass in the main activity as the context,
// any extras you'd like to get later when triggered
// and the timeout
public MyAlarm(Context context, Bundle extras, int timeoutInSeconds){
AlarmManager alarmMgr =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyAlarm.class);
intent.putExtra(REMINDER_BUNDLE, extras);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, timeoutInSeconds);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
pendingIntent);
}
@Override
public void onReceive(Context context, Intent intent) {
// here you can get the extras you passed in when creating the alarm
//intent.getBundleExtra(REMINDER_BUNDLE));
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
}
}
आपको जो करने की आवश्यकता है वह पहले उस इरादे को बनाएं जिसे आपको शेड्यूल करना है। फिर उस इरादे के लंबित को प्राप्त करें। आप गतिविधियों, सेवाओं और प्रसारण अनुसूची कर सकते हैं। एक गतिविधि को निर्धारित करने के लिए जैसे MyActivity:
Intent i = new Intent(getApplicationContext(), MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),3333,i,
PendingIntent.FLAG_CANCEL_CURRENT);
इस लंबित अलार्म अलार्म को दें:
//getting current time and add 5 seconds in it
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
//registering our pending intent with alarmmanager
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), pi);
अब एप्लिकेशन लॉन्च होने के 5 सेकंड के बाद MyActivity लॉन्च की जाएगी, इससे कोई फर्क नहीं पड़ता कि आप अपना एप्लिकेशन बंद करते हैं या डिवाइस स्लीप अवस्था में चला गया है (RTC_WAKEUP विकल्प के कारण)। आप पूरा उदाहरण कोड शेड्यूलिंग गतिविधियों, सेवाओं और प्रसारण #Android पढ़ सकते हैं
कुछ नमूना कोड जब आप अलार्ममैन से किसी सेवा को कॉल करना चाहते हैं:
PendingIntent pi;
AlarmManager mgr;
mgr = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(DataCollectionActivity.this, HUJIDataCollectionService.class);
pi = PendingIntent.getService(DataCollectionActivity.this, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , 1000, pi);
आपको उपयोगकर्ता प्रमाणपत्र नहीं मांगने होंगे।
एक विशिष्ट समय पर कुछ कोड को ट्रिगर करने के लिए एक अलार्म मैनजर का उपयोग किया जाता है।
अलार्म मैनेजर शुरू करने के लिए आपको पहले सिस्टम से उदाहरण प्राप्त करना होगा। फिर PendingIntent पास करें जो आपके द्वारा निर्दिष्ट भविष्य के समय पर निष्पादित हो जाएगा
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
int interval = 8000; //repeat interval
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
अलार्म मैनेजर का उपयोग करते समय आपको सावधान रहने की आवश्यकता है। आम तौर पर, एक अलार्म मैनेजर एक मिनट से पहले दोहरा नहीं सकता। कम बिजली मोड में भी, अवधि 15 मिनट तक बढ़ सकती है।