【问题标题】:Set alarm from Android 4.4 Kitkat从 Android 4.4 Kitkat 设置闹钟
【发布时间】:2013-11-07 16:38:15
【问题描述】:

Android 4.4 APIs page 我读到:

当您将应用的 targetSdkVersion 设置为“19”或更高时,警报 您使用 set() 或 setRepeating() 创建的结果将是不准确的。

[剪切]

这种不精确的批处理行为仅适用于更新后的应用。如果你有 将 targetSdkVersion 设置为“18”或更低,您的警报将继续 在 Android 4.4 上运行时,其行为与之前版本一样。

在我的应用程序中,我需要准确的时间警报,并且我将 targetSdkVersion 更新为“19”。以下代码是否正确?此外,如果我在以前版本的手机中将 targetSdkVersion 设置为“19”,“旧”方法 AlarmManager.set 是否会继续以相同的方式工作?

private void setAlarm (long ms){
    final AlarmManager am = (AlarmManager) mCtx.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, BroadcastReceiverAlarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(this, ALARM_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) {
        am.set(AlarmManager.RTC, ms, pi);
    } else {
        setAlarmFromKitkat(am, ms, pi);
    }
}

@TargetApi(19)
private void setAlarmFromKitkat(AlarmManager am, long ms, PendingIntent pi){
    am.setExact(AlarmManager.RTC, ms, pi);
}

【问题讨论】:

    标签: android alarmmanager android-alarms android-4.4-kitkat


    【解决方案1】:

    是的,这是正确的。谷歌未能更详细地描述:

    1. 对于 targetSDKVersion
    2. 对于 targetSDKVersion>=19,“set”对于运行

    【讨论】:

      【解决方案2】:

      我从我的 ADT 下载了 4.1.2 并卸载了 4.4。 我将“构建目标”设置为 4.1.2,清理并重建了我的应用程序,并将 apk 重新安装到移动设备。

      但是,行为仍然不准确。

      我将adb shell dumpsys alarm 的输出粘贴到下面:

      RTC_WAKEUP #0:闹钟{426941b0 type 0 net.coolbie.alarmclock}

         type=0 when=+4m46s480ms repeatInterval=0 count=0
      
         operation=PendingIntent{42553668: PendingIntentRecord{42a6cc38 net.coolbie.alarmclock broadcastIntent}}
      

      你可以看到上面的“when”是+4m,但是哪个triggerTime只有8秒。

      long triggerTime = calendar.getTimeInMillis();
      long currentTime = System.currentTimeMillis();
      Toast.makeText(mContext, "gap is:"+(triggerTime-currentTime)/1000,Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(mContext.getApplicationContext(), AlarmReceiver.class);  
      PendingIntent pendIntent = PendingIntent.getBroadcast(mContext.getApplicationContext(),  
                          0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
      mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendIntent);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多