我认为很多时候会问这个问题,stackoverflow
但仍然有很多人在努力解决这个问题.
在我的Android应用程序中,我必须每半小时唤醒设备以获取当前位置并将其发送到服务器.为此,我使用AlarmManager
了setExactAndAllowWhileIdle()
方法和WakefulBroadcastReceiver
.它几乎适用于所有标准/流行设备,如三星,LG(Nexus),索尼,松下,联想,摩托罗拉,微型等等....但其他一些设备主要是中国设备不支持或不允许设备唤醒从打瞌睡模式开始setExactAndAllowWhileIdle()
.我已在leeco letV (Android OS 6.1)
设备中对其进行了测试,不允许报警管理器在特定时间间隔内唤醒.
我在下面提到的代码部分:
UserTrackingReceiverIntentService.java
public class UserTrackingReceiverIntentService extends IntentService {
public static final String TAG = "UserTrackingReceiverIntentService";
Context context;
public UserTrackingReceiverIntentService() {
super("UserTrackingReceiverIntentService");
}
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onHandleIntent(Intent intent) {
this.context = this;
if (!Util.isMyServiceRunning(LocationService.class, context)) {
context.startService(new Intent(context, LocationService.class));
}
Calendar calendar = Calendar.getInstance();
//********************************** SETTING NEXT ALARM *********************************************
Intent intentWakeFullBroacastReceiver = new Intent(context, SimpleWakefulReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 1001, intentWakeFullBroacastReceiver, 0); …
Run Code Online (Sandbox Code Playgroud) 有人知道当设备处于打盹或应用处于待机状态时,持有部分唤醒锁定的白名单应用是否可以接收位置更新?
Android文档(http://developer.android.com/training/monitoring-device-state/doze-standby.html)仅声明CPU和网络延迟,并且未提及对位置更新的任何影响(即来自LocationManager) ).基于此,似乎位置更新不受Doze/Standby影响,因此如果应用程序持有部分唤醒锁定(以保持CPU运行),则应用程序应该能够接收位置更新.
我已经实现了这一点并对其进行了测试,发现应用程序似乎没有在Doze中接收位置更新,即使它具有部分唤醒锁定并且已列入白名单.有趣的是,当我将设备放在我的办公桌上,一夜之间运行带有唤醒锁定的应用程序时,早上电池几乎是空的,但是当重复使用不带唤醒锁定的应用程序时,电池在早上几乎已满.所以看起来该应用程序一直在运行,但没有收到位置更新.
一些额外的背景:该应用程序用于车队跟踪,所以我们试图找出一个应用程序是否有运行后台服务,可靠地接收位置更新时,使用电池供电.
谢谢!-Tom B.
android location android-6.0-marshmallow android-doze-and-standby
这是一个简单的问题,看到G +(这里)有关于此的大量帖子,以及官方文档(这里)缺乏信息:
当设备进入"打盹"模式时,应用程序的服务会发生什么变化?
它对后台/前台服务(绑定/未绑定,已启动/未启动)有什么作用,有/无部分/完整唤醒锁?
例如,为了创建在设备屏幕关闭时播放音频流的服务,您会做什么?如果音频流不是来自本地文件,而是来自网络,该怎么办?
看到Google开发者声称:
已经运行前台服务的应用程序(带有相关通知)不受打盹的限制.
- 之后进行了大量的讨论,声称这并不完全正确,我认为知道特殊的后台操作应用程序应该做什么是相当令人困惑的.
android android-service android-doze-and-standby android-doze
我有一个WakefulBroadcastReceiver
带IntentService
,叫和做一些东西,每半小时报警.我已经用setExactAndAllowWhileIdle()
方法处理了打盹模式.
一些新的定制操作系统的智能手机最近在市场上推出,他们有自己的基于android操作系统的定制操作系统 像oppo与颜色os,vivo与funtouch os,xiomi与MIUI os.在操作系统中,有一个清除内存的功能.他们有一个触摸清除内存选项.例如,如果用户清除最近的应用程序列表或从最近的应用程序列表应用程序删除应用程序的所有后台服务以及所有警报将被终止.
如何使用这些新操作系统?
如果设备处于DOZE IDLE或IDLE_MAINTENANCE模式,如果我们为" android.os.action.DEVICE_IDLE_MODE_CHANGED " 注册广播接收器,则可以接收这些事件.但是当使用adb命令使App进入App Standby时,此接收器无法正常工作.对于在Marshmallow及以上版本上运行的设备,我们是否有可能以编程方式检查应用程序是否已进入或退出App Standby模式?
用于使App进入App Standby的adb命令
adb shell dumpsys battery unplug
adb shell am set-inactive {Package name} true
Run Code Online (Sandbox Code Playgroud)
并退出
adb shell am set-inactive {Package name} false
Run Code Online (Sandbox Code Playgroud) android android-6.0-marshmallow android-appstandby android-doze-and-standby android-doze
我需要每隔X小时设置一次重复警报,甚至会在打盹模式下触发.但是,AlarmManager for Android 23中唯一可用的Apis是setExactAndAllowWhileIdle和setAndAllowWhileIdle,它们不用于重复警报.
我想知道每次发射时我是否应该重新安排闹铃?或者有更好的解决方案吗?
android android-alarms android-6.0-marshmallow android-doze-and-standby android-doze
我有一个应用程序,通过侦听通知NotificationListenerService
.我的应用程序在打盹模式和应用程序中都能幸免于几乎所有手机(如果设置正确,例如异常或前台服务).
然后来华为和小米用他们自己的Android修改来"改善电池寿命".这些可能会严重影响后台运行的应用程序,以至于在一两个星期之后必须重新安装应用程序.即使清除数据也不会"解冻"应用程序.即使是他们自己的"优化"的例外也无法可靠地解决这个问题.只有完全禁用所有优化,例如启用"高性能模式"可能会解决这个问题.但是用户不想禁用这些选项.
你是如何处理这些案件的?我们怎样才能阻止制造商停止搞乱核心Android?更不用说有趣的ANR和崩溃Zygote
:(
android android-service android-doze-and-standby huawei android-doze
我制作的应用程序一直有效,直到Android 6.0.我认为这是Doze功能,它不允许我的警报发射.
我使用sharedpreferences来处理选项:
//ENABLE NIGHT MODE TIMER
int sHour = blockerTimerPreferences.getInt("sHour", 00);
int sMinute = blockerTimerPreferences.getInt("sMinute", 00);
Calendar sTime = Calendar.getInstance();
sTime.set(Calendar.HOUR_OF_DAY, sHour);
sTime.set(Calendar.MINUTE, sMinute);
Intent enableTimer = new Intent(context, CallReceiver.class);
enableTimer.putExtra("activate", true);
PendingIntent startingTimer = PendingIntent.getBroadcast(context, 11002233, enableTimer, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager sAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
sAlarm.setRepeating(AlarmManager.RTC_WAKEUP,
sTime.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, startingTimer);
Run Code Online (Sandbox Code Playgroud)
这里有什么错误吗?
这是一个阻止通话的应用.谢谢!
编辑: 我有3个文件(更多但是......)像:
MainActivity (All code)
CallReceiver (Broadcast that triggers the alarm again (reboot etc))
CallReceiverService (Handles the call / phone state)
Run Code Online (Sandbox Code Playgroud) android alarmmanager android-alarms android-pendingintent android-doze-and-standby
我正在创建一个应用程序,它将在设备锁定时运行Activity#setShowWhenLocked(true)
.我不想阻止设备进入低功耗状态.我知道系统会这样做Always-On Display
,并且显示器具有相关的电源模式:
/frameworks/base/core/java/android/view/Display.java
286 /**
287 * Display state: The display is dozing in a low power state; it is still
288 * on but is optimized for showing system-provided content while the
289 * device is non-interactive.
290 *
291 * @see #getState
292 * @see android.os.PowerManager#isInteractive
293 */
294 public static final int STATE_DOZE = ViewProtoEnums.DISPLAY_STATE_DOZE; // 3
295
296 /**
297 * Display state: The display is dozing in a suspended low power …
Run Code Online (Sandbox Code Playgroud) android android-source android-doze-and-standby android-doze android-9.0-pie
AlarmManager.setAndAllowWhileIdle()
和 和有什么区别AlarmManager.setExactAndAllowWhileIdle()
?它们对 Android 6.0 (Marshmallow) API 中引入的 Doze 模式有何影响?
android android-alarms android-6.0-marshmallow android-doze-and-standby