我正在製作一個鬧鐘應用程序。我使用setAlarmClock設置時間,WakefulBroadcastReceiver接受設置的鬧鐘。幾個小時後setAlarmClock失敗
當我使用測試它在1分鐘或30分鐘後響鈴時,即使我已經殺死了應用程序,鬧鐘響了起來。但每次我將它設置在5小時後響起,在WakefulBroadcastReceiver不再收到的PendingIntent
這裏是我的代碼在全局類:
public static void setAlarm (Context context, long timelong){
SharedPreferences sharedPreferences = context.getSharedPreferences(KEY_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putLong(KEY_SET_TIME, timelong);
editor.commit();
myToaster(context, "Alarm will ring after " + timeCompare(timelong, System.currentTimeMillis()));
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(timelong, pendingIntent), pendingIntent);
}
的WakefulBroadcastReceiver
public class AlarmReceiver extends WakefulBroadcastReceiver{
final private String TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent){
Log.e(TAG, "received");
Intent toRinger = new Intent(context, RingerActivity.class);
toRinger.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.e(TAG, "Received and firing intent");
context.startActivity(toRinger);
}
}
然後,我設置RingerActivity.class onCreate上的mediaPlayer響鈴。
而且,這裏是我使用TimepickerFragment
public TimepickerFragment(){
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
//Use the current time as the default values for the time picker
textView = (TextView) getActivity().findViewById(R.id.textView);
Date d = new Date();
int hour = d.getHours();
int minute = d.getMinutes();
//Create and return a new instance of TimePickerDialog
return new TimePickerDialog(getActivity(),this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
//onTimeSet() callback method
public void onTimeSet(TimePicker view, int hour, int minute){
Long timelong = timeToLong(hour, minute);
Globe.setAlarm(getContext(), timelong);
String timeString = Globe.dateToTimeString(new Date(timelong));
String alarmInfo = getText(R.string.alarm_info) + " " + timeString;
textView.setText(alarmInfo);
}
public static long timeToLong(int h, int m) {
Date d = new Date();
d.setHours(h);
d.setMinutes(m);
if (d.getTime() <= System.currentTimeMillis())
return (d.getTime() + (1000 * 60 * 60 * 24));
else
return d.getTime();
}
因此,如何調用setAlarm方法,任何人都可以告訴我爲什麼,如果我把它進一步超過1個小時我的鬧鐘不工作,我怎麼修復它?
我已經看到了關於這個主題的其他答案,但還是沒有找到我的答案。試圖爲SDK M使用setExactWhileIdle讓我的情況更糟糕。如果我在5分鐘後設置,但是在15分鐘後不會如此設置,則它會響鈴。 –
5小時的傳遞時間如何顯示我們 – Tufan
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT); am.setRepeating(AlarmManager.RTC_WAKEUP,timelong pendingIntent); – Tufan