在android棒棒糖上创建闹钟

时间:2015-07-12 10:54:26

标签: android alarmmanager android-5.0-lollipop android-5.1.1-lollipop android-powermanager

我正在制作一个闹钟。要设置日期和时间,我使用AlarmManager

AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);      
PendingIntent pi = PendingIntent.getBroadcast(context, id, intent,  PendingIntent.FLAG_UPDATE_CURRENT);
                    am.set(AlarmManager.RTC_WAKEUP, note.getAlarmTime(), pi);

在我的BroadcastReceiver方法onReceive中,我开始新的活动(就像信息对话和播放音乐一样)和解锁屏幕使用:

PowerManager pm;
PowerManager.WakeLock wakeLock;
KeyguardManager.KeyguardLock myLock;

KeyguardManager myKeyGuard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    isLocked = myKeyGuard.inKeyguardRestrictedInputMode();

myLock = myKeyGuard.newKeyguardLock(KEYGUARD_SERVICE);

    if (isLocked) {
        myLock.disableKeyguard();
    }

    pm = (PowerManager) getApplicationContext()
            .getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
    wakeLock.acquire();

一切正常,但在Lollipop设备上,我注意到闹钟并不总是有效,特别是当设备被阻挡超过20分钟时。会是什么呢?也许某些功能会重置指定的时间,或者我需要一种不同的方法来在Android Lollipop上以编程方式解锁屏幕?

1 个答案:

答案 0 :(得分:2)

在Android 19中,如果您想要准确的时间而不是AlarmManager.setExact()代码,那么您应该使用新的AlarmManager.set()方法。这在AlarmManager API documentation

中提到
  

注意:从API 19(KITKAT)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续查看之前在请求时准确传递所有警报的行为。

相关问题