AlarmManager 无法在 android 6.0 上工作
AlarmManager can't work on android 6.0
我正在使用 AlarmManager,它不适用于 android os 6.0。
这是我的代码:
private void startAlarmManager(String id) {
userID = GlobalValue.getUserName(GuideNavigationActivity.this);
Context context = getBaseContext();
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
gpsTrackerIntent = new Intent(context, GpsTrackerAlarmReceiver.class);
gpsTrackerIntent.putExtra("id", id);
gpsTrackerIntent.putExtra("userID", userID);
gpsTrackerIntent.putExtra("idCourse", idCourse.toString());
gpsTrackerIntent.putExtra("typeCourse", typeCourse);
pendingIntent = PendingIntent.getBroadcast(context, 0, gpsTrackerIntent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
}
else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
} else {
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
}
}
请支持我。非常感谢。
AlarmManager
不允许您在 Android 5.1+.
上频繁重复,即使通过手动步骤(例如 setExactAndAllowWhileIdle()
)也是如此
此外,在 Android 的所有版本上,将 AlarmManager
用于事件的频繁发生 非常 效率低下。这是 Android 不再支持它的原因之一,因为太多开发人员使用 AlarmManager
做不当的事情,结果浪费了用户的电池。
如果您需要每秒获取控制权,请使用一些进程内解决方案,例如ScheduledExecutorService
。或者,由于您的名字暗示您正在跟踪位置,请使用适当的 API 让您知道位置何时发生变化,而不是试图每秒都获得控制权。
我正在使用 AlarmManager,它不适用于 android os 6.0。 这是我的代码:
private void startAlarmManager(String id) {
userID = GlobalValue.getUserName(GuideNavigationActivity.this);
Context context = getBaseContext();
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
gpsTrackerIntent = new Intent(context, GpsTrackerAlarmReceiver.class);
gpsTrackerIntent.putExtra("id", id);
gpsTrackerIntent.putExtra("userID", userID);
gpsTrackerIntent.putExtra("idCourse", idCourse.toString());
gpsTrackerIntent.putExtra("typeCourse", typeCourse);
pendingIntent = PendingIntent.getBroadcast(context, 0, gpsTrackerIntent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
}
else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
} else {
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis()+ Constant.GPS_INTERVAL, pendingIntent);
}
}
请支持我。非常感谢。
AlarmManager
不允许您在 Android 5.1+.
setExactAndAllowWhileIdle()
)也是如此
此外,在 Android 的所有版本上,将 AlarmManager
用于事件的频繁发生 非常 效率低下。这是 Android 不再支持它的原因之一,因为太多开发人员使用 AlarmManager
做不当的事情,结果浪费了用户的电池。
如果您需要每秒获取控制权,请使用一些进程内解决方案,例如ScheduledExecutorService
。或者,由于您的名字暗示您正在跟踪位置,请使用适当的 API 让您知道位置何时发生变化,而不是试图每秒都获得控制权。