Tôi nghĩ rằng, bạn có hai vấn đề cố hữu với cách tiếp cận này:
AlarmManager sẽ không chấp nhận những khoảng thời gian lớn vì số lượng millis sẽ tràn lập luận
Tôi không nghĩ rằng Báo động sẽ tồn tại khi khởi động lại điện thoại của bạn, điều chắc chắn nhất sẽ xảy ra trong một khoảng thời gian dài như vậy.
tôi lời khuyên mà bạn lưu trữ mỗi báo động ở một nơi an toàn và sử dụng một sự kết hợp của AlarmManager và onBoot thu để kiểm tra xem một trong những báo động ra khỏi danh sách của bạn phải bị sa thải ngày này rất và chỉ cần sắp xếp lại một báo động để đánh thức bạn lên vào ngày mai nếu không có.
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);
}
}
Để bắt đầu dịch vụ tại sử dụng thời gian khởi động này:
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);
}
}
Cuối cùng thêm video này vào biểu hiện của bạn để sắp xếp serviceAutoLauncher của bạn sẽ được tung ra tại mỗi khởi động:
<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>
Nguồn
2011-09-27 11:32:37
Tôi đã downvoted câu trả lời được chấp nhận này, bởi vì câu trả lời từ Laurent thực sự là câu trả lời đúng. –