android - 如何在android中设置正确的警报/通知时间?
问题描述
我的问题是我从第三方 api 获取我的视频游戏发布日期数据,并且第三方 api 的日期以毫秒为单位,当我使用 java 的 Calendar 类设置我的警报时,警报/通知在错误的时间被调用,在android中设置警报以便始终在正确的时间被调用的最佳方法是什么?
例如,我现在的代码很奇怪。游戏本周五发布,我在周五和本周四东部时间晚上 8 点为这款游戏设置了警报,警报/通知被触发。为什么周五午夜不开火?
这是我的 setAlarm 方法
/**
* Sets the next alarm to run. When the alarm fires,
* the app broadcasts an Intent to this WakefulBroadcastReceiver.
*/
public void setAlarm(Context context, Alarm alarm) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// Passing our intent data
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("releaseId", alarm.getReleaseID());
alarmIntent.putExtra("gameName", alarm.getGameName());
alarmIntent.putExtra("gameId", alarm.getGameId());
alarmIntent.putExtra("releaseDate", alarm.getDate());
alarmIntent.putExtra("type", alarm.getType());
// Note the release id is used here
String alarmId = String.valueOf(alarm.getReleaseID()) + getTypeId(alarm.getType());
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, Integer.parseInt(alarmId), alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
calendar.setTimeInMillis(alarm.getDate());
Date date = calendar.getTime();
alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
}
解决方案
android 4.4 后使用 setExact;android 6.0 后用户 setExactAndAllowWhileIdle 链接https://developer.android.google.cn/training/monitoring-device-state/doze-standby.html#restrictions https://developer.android.google.cn /about/versions/android-4.4.html#BehaviorAlarms
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
}
推荐阅读
- linux - 在 Linux 上部署 asp.net core 应用程序 - 重定向 url 问题
- python - Python编码base64不期望正确的结果?
- php - 正则表达式检查给定字符之前和之后的第一个字符
- javascript - 天才聊天杂乱无章的消息
- ios - 如何在不包含依赖项的情况下获取 .framework 文件
- excel - 在其他模块中访问表单变量时会自动调用 UserForm_Initialize()
- php - WordPress - 如何检查 CSS 文件名是否包含“.min”?
- javascript - Bootstrap Lightbox Carousel 中的按钮下载轮播中的活动图像
- linux - 简单的 bash 脚本不会执行,但相同的脚本会
- javascript - Console.log 同一类的特定元素