AlarmManager 在 Android 版本 4.4.2 KitKat 中触发两次
AlarmManager fires twice in Android Version 4.4.2 KitKat
我有一个 alarmManager 在所有 Android 版本中触发一次,但仅在版本 4.4.2 中触发两次。
我读到此版本中有影响 AlarmManager 的更改,但我不知道如何解决它,如果是这种情况......
有什么建议吗?
这是代码:
public void setOneTimeTimer(Context context, int id)
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
if ((wakelock==null) | ((wakelock != null) && (wakelock.isHeld() == false))){
wl.acquire();
wakelock = wl;
//Release wakeLock is in the Alarm Class
}
AlarmManager am = (AlarmManager)NoteActivity.this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(NoteActivity.this, Alarm.class);
intent.putExtra("name", name);
intent.putExtra("phone", phone);
intent.putExtra("timeSet", timeSet);
PendingIntent pi = PendingIntent.getBroadcast(NoteActivity.this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) {
setAlarm(am, interval, pi);
}
else
{
setAlarmToKitkat(am, interval, pi);
}
}
private void setAlarm(AlarmManager am, long interval, PendingIntent pi){
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, pi);
}
@TargetApi(19)
private void setAlarmToKitkat(AlarmManager am, long interval, PendingIntent pi){
am.setWindow(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, 20000, pi);
}
所以我会在这里写下我的解决方案,以防将来对某人有所帮助:
问题是我在 TimePickerDialog 的 "onTimeSet" 方法中设置了闹钟,出于某种原因,它只在 KitKat 版本上激活了两次闹钟。
当我添加一个正向按钮的空(!)方法时,它只运行了一次并激活了警报方法......那是我添加的方法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
timePicker.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.title_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
}
}
});
}
我有一个 alarmManager 在所有 Android 版本中触发一次,但仅在版本 4.4.2 中触发两次。 我读到此版本中有影响 AlarmManager 的更改,但我不知道如何解决它,如果是这种情况...... 有什么建议吗?
这是代码:
public void setOneTimeTimer(Context context, int id)
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
if ((wakelock==null) | ((wakelock != null) && (wakelock.isHeld() == false))){
wl.acquire();
wakelock = wl;
//Release wakeLock is in the Alarm Class
}
AlarmManager am = (AlarmManager)NoteActivity.this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(NoteActivity.this, Alarm.class);
intent.putExtra("name", name);
intent.putExtra("phone", phone);
intent.putExtra("timeSet", timeSet);
PendingIntent pi = PendingIntent.getBroadcast(NoteActivity.this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) {
setAlarm(am, interval, pi);
}
else
{
setAlarmToKitkat(am, interval, pi);
}
}
private void setAlarm(AlarmManager am, long interval, PendingIntent pi){
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, pi);
}
@TargetApi(19)
private void setAlarmToKitkat(AlarmManager am, long interval, PendingIntent pi){
am.setWindow(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, 20000, pi);
}
所以我会在这里写下我的解决方案,以防将来对某人有所帮助: 问题是我在 TimePickerDialog 的 "onTimeSet" 方法中设置了闹钟,出于某种原因,它只在 KitKat 版本上激活了两次闹钟。 当我添加一个正向按钮的空(!)方法时,它只运行了一次并激活了警报方法......那是我添加的方法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
timePicker.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.title_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
}
}
});
}