मुझे लगता है कि आप इस दृष्टिकोण के साथ दो निहित मुद्दे हैं:
AlarmManager बड़े समय अंतराल को स्वीकार नहीं करेगा क्योंकि मिली सेकंड की संख्या तर्क
अतिप्रवाह होगा मैं अलार्म नहीं लगता कि आपके फोन के रीबूट से बच जाएगा जो निश्चित रूप से इतनी लंबी अवधि के दौरान होगा।
मैं सलाह है कि आप एक सुरक्षित जगह में प्रत्येक अलार्म की दुकान और जांच करने के लिए AlarmManager और ONBOOT रिसीवर के संयोजन का उपयोग करता है, तो अपनी सूची से अलार्म में से एक यह बहुत ही दिन निकाल दिया जाना चाहिए और सिर्फ जगाने के लिए एक अलार्म को पुनर्निर्धारित कल अगर आप कोई नहीं करते हैं।
public class AlarmService extends Service {
//compat to support older devices
@Override
public void onStart(Intent intent, int startId) {
onStartCommand(intent, 0, startId);
}
@Override
public int onStartCommand (Intent intent, int flags, int startId){
//your method to check if an alarm must be fired today
checkForTodayAlarmsAndBehaveAppropriately();
//reschedule me to check again tomorrow
Intent serviceIntent = new Intent(AlarmService.this,AlarmService.class);
PendingIntent restartServiceIntent = PendingIntent.getService(AlarmService.this, 0, serviceIntent,0);
AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
// cancel previous alarm
alarms.cancel(restartServiceIntent);
// schedule alarm for today + 1 day
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
// schedule the alarm
alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
}
}
बूट समय उपयोग में आपकी सेवा शुरू करने के लिए इस:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class serviceAutoLauncher extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context,AlarmService.class);
context.startService(serviceIntent);
}
}
अंत में अपने serviceAutoLauncher शेड्यूल करने के लिए प्रत्येक बूट पर शुरू होने की अपनी प्रकट करने के लिए इस जोड़ें:
<receiver android:name="serviceAutoLauncher">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.HOME"></category>
</intent-filter>
</receiver>
स्रोत
2011-09-27 11:32:37
मैंने इस स्वीकृत उत्तर को कम कर दिया है, क्योंकि लॉरेन से जवाब वास्तव में सही है। –