简体   繁体   English

AlarmManager在Android版本4.4.2 KitKat中触发两次

[英]AlarmManager fires twice in Android Version 4.4.2 KitKat

I have an alarmManager that fires one time in all Android Versions, but only in Version 4.4.2 it fires twice. 我有一个alarmManager在所有Android版本中都会触发一次,但仅在4.4.2版中会触发两次。 I read that there were changes in this version that affected AlarmManager, but I don't know how to workaround it, and if this is the case here... Any suggestions? 我读到该版本中的更改影响了AlarmManager,但我不知道如何解决它,如果是这种情况,有什么建议吗?

This is the code: 这是代码:

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);
} 

在此处输入图片说明

So I'll write here my solution in case it will help someone in the future: The problem was that I set the alarm at a "onTimeSet" method of TimePickerDialog and for some reason only on KitKat version it activated the alarm twice. 因此,我在这里写下我的解决方案,以防将来对某人有所帮助:问题是我将警报设置为TimePickerDialog的“ onTimeSet”方法,并且由于某种原因(仅出于KitKat版本),它两次激活了警报。 When I added an empty(!) method of a positive button, it worked out and activated the alarm method only once... That was the method I added: 当我添加一个肯定按钮的empty(!)方法时,该方法起作用并仅激活一次警报方法...这就是我添加的方法:

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) {

                                            }
                                        }
                                    }); 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM