एंड्रॉयड alarmmanager अपने जवाब है। इसे एक प्रसारण रिसीवर के साथ उपयोग करें जो फोन के जागने पर अलार्म को रीसेट करता है।
कोड उदाहरण के साथ
अब: अलार्म रीसेट करने के लिए जब भी फोन बंद किया गया है के लिए
public class AlarmReceiver extends BroadcastReceiver {
private final String SOMEACTION = "packagename.ACTION"; //packagename is com.whatever.www
@Override
public void onReceive(Context context, Intent intent) {
Time now = new Time();
now.setToNow();
String time = FileHandler.timeFormat(now);
String action = intent.getAction();
if(SOMEACTION.equals(action)) {
// here you call a service etc.
}
रिसीवर: अपने अंतराल के लिए
Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction("packagename.ACTION");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pendingIntent);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
रिसीवर: एक विधि के अंदर अलार्म सेट।
public class AlarmSetter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// get preferences
SharedPreferences preferences = context.getSharedPreferences("name_of_your_pref", 0);
Map<String, ?> scheduleData = preferences.getAll();
// set the schedule time
if(scheduleData.containsKey("fromHour") && scheduleData.containsKey("toHour")) {
int fromHour = (Integer) scheduleData.get("fromHour");
int fromMinute = (Integer) scheduleData.get("fromMinute");
int toHour = (Integer) scheduleData.get("toHour");
int toMinute = (Integer) scheduleData.get("toMinute");
//Do some action
}
}
}
प्रकट बहुत महत्वपूर्ण है, इस आवेदन के तहत जोड़ा जाता है:
<receiver android:name="AlarmReceiver">
<intent-filter>
<action android:name="packagename.ACTION"/>
<action android:name="packagename.ACTION2"/>
</intent-filter>
</receiver>
<receiver android:name="AlarmSetter" >
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
इसके अलावा इस के लिए काम करने के लिए आप निम्न लाइन के साथ प्रकट में बूट प्रसारण प्राप्त करने के लिए अनुमति जोड़नी होगी में
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
उम्मीद है कि यह स्पष्ट चीजें ऊपर हों, अगर कोई त्रुटि बताती है।
संपादित (उदाहरण के alarmsetter जोड़ा):
public class AlarmSetter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Do your stuff
}
}
मेरे प्रश्न को थोड़ा खराब करने के लिए खेद है, लेकिन मुझे पहले से ही अलार्ममैनगर पता था, लेकिन समस्या को हल करने के लिए इसका उपयोग कैसे नहीं किया जाए ... और न ही इसे कैसे जगाया जाए। तो मुझे लगता है कि मुझे वही सेवा शुरू करने की ज़रूरत है जैसे कि कॉमन्सवेयर वेकफुलइन्टेंट सेवा डेमो (https://github.com/commonsguy/cwac-wakeful), लेकिन विभिन्न रिसीवर से ...? ऐप चलाने के बिना, रोज़ाना और/या प्रत्येक बूट पर सेवा कैसे चलाएं। – micadelli
अलार्ममेनेट्स के बारे में बहुत सरल पढ़ें। या इसे गूगल करें :) आज रात कुछ कोड दे सकते हैं यदि आपका अभी भी – Warpzit
अटक गया है कुछ दिनों पहले ही अटक गया है :) तो हाँ, कोड उदाहरणों की अत्यधिक सराहना की जाएगी। – micadelli