一切似乎都指向这两个命令:
adb shell dumpsys battery unplug
adb shell dumpsys deviceidle step
Run Code Online (Sandbox Code Playgroud)
我按照运行Marshmallow正式版的Nexus 6上的说明进行操作.我将手机插入我的测试机器.我设置了我的应用程序来测试我想用打瞌睡测试的作品.我关掉了我的屏幕.在battery unplug上面运行后我没有输出所以我认为它有效,但每次我运行deviceidle step输出总是Stepped to: ACTIVE.
我不确定它是否重要,但我正在尝试测试的应用程序的特殊功能是我设置的警报应该将手机从Doze中唤醒.我希望我的设备能够在我的PendingIntent计划AlarmManager.setAlarmClock中断时打瞌睡.这会阻止我的设备进入Doze吗?
android adb android-6.0-marshmallow android-doze-and-standby android-doze
AlarmManager.setAndAllowWhileIdle()和 和有什么区别AlarmManager.setExactAndAllowWhileIdle()?它们对 Android 6.0 (Marshmallow) API 中引入的 Doze 模式有何影响?
android android-alarms android-6.0-marshmallow android-doze-and-standby
我有一个里程日志应用程序,可以进行GPS跟踪,并能够在后台建立与汽车的OBDII连接.
现在我想显示一个Popup,告诉用户我的应用程序是否在打盹中没有列入白名单,因为这可能会停止我的后台(实际上是前景)服务...
我做:
String PACKAGE_NAME = getApplicationContext().getPackageName();
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
boolean status = false;
status = pm.isIgnoringBatteryOptimizations(PACKAGE_NAME);
if (!status) {
// show popup
}
Run Code Online (Sandbox Code Playgroud)
但是PowerManager.isIgnoringBatteryOptimizations总是返回'true',即使它再次从'Not optimized apps'中删除.只有当我卸载应用程序'false'时才会再次返回...在Galaxy Note 8(Android 8.0)和Emulator 8.1上测试
问题很简单:这是一个错误吗?或者如何从白名单中删除应用程序,以便PowerManager.isIgnoringBatteryOptimizations再次返回'false'?
我在互联网上四处寻找有关Android Marshmallow 中应用待机模式的详细信息,但我没有找到有关何时发生的任何特定数据,除了一些可能导致它发生的列出条件。我还看到一个模糊的“如果设备长时间闲置,系统允许闲置应用程序每天访问一次网络”,但没有具体说明此窗口将持续多长时间。
打盹模式似乎得到了很好的研究(这个要点特别有用并且与我的发现一致),但我还没有看到 App Standby 的运行情况。我创建了一个测试应用程序,它通过警报每 5 分钟向服务器发送一次数据并运行它一周,并且它继续每 5 分钟访问一次服务器,除非手机进入打盹模式并且只在维护期间访问服务器,然后回到每 5 分钟唤醒手机一次,因此即使我没有直接与应用程序交互,Android 似乎也没有将其置于“应用程序待机”状态。
是否有任何关于 App Standby 工作原理的具体数据?
我知道setExactAndAllowWhileIdle即使在打ze模式下也将调用警报,但由于没有setRepeatingAndAllowWhileIdle方法,因此每天如何重复发出警报。
我注意到Android 6.0设备上的音频流应用程序存在问题.音频流通过网络连接通过HLS完成.音频回放发生在具有活动通知的前台服务中.我注意到的是,当应用程序进入打盹模式/应用程序待机状态时,wifi连接会丢失并且播放暂停.我的服务位于前台,并且有一个有效的通知,根据文档,这应该使我的应用程序不会被中断.我还获得并维护一个Wifi锁.我已经阅读了有关将应用程序列入白名单的信息,但是像Spotify这样的应用程序不会请求任何特殊权限来避免此问题.有什么想法或建议吗?
android android-wifi android-6.0-marshmallow android-doze-and-standby
当可以从推送消息中下载大量图像时,我希望使用Jobscheduler api来安排作业。由于操作系统在打ze模式下将忽略唤醒锁,并且由于fcm消息最多只能将设备唤醒10秒,因此维护窗口似乎是我从所有推送通知中下载图像的唯一方法。
每张图片最多100kb,一次最多50张图片。因此,基本上所有最大5兆字节的数据使用量。
我想知道打do模式下的窗口是否足够宽以允许这些下载。
我在Google上进行了搜索,并发现了一些松散的数据详细信息,声称有5-10分钟。
谁能指导我获得正确的信息。
谢谢并恭祝安康。
android firebase android-doze-and-standby firebase-cloud-messaging
我需要创建一个应该 24/7 全天候运行的应用程序。我不关心电池消耗,becoz 应用程序不会提交到 PlayStore 并且仅适用于选定的用户。我也知道应用程序只能使用一天,这在我的情况下是可以接受的。
应用程序功能主要依赖于网络和蓝牙功能,大部分代码都是用 pre marshmallow 编写的,改变整个实现对我来说现在不是一个正确的选择。
那么有没有什么方法可以不受任何限制地创建应用程序呢?此外,正如观察到的一些设备制造商增加了额外的电池优化层,使情况变得更糟。
我试图创建一个带有部分唤醒锁的虚拟前台服务,但这似乎不起作用。甚至将应用程序列入白名单也无法解决问题。
谷歌没有适当的文件关于打瞌睡/待机会影响哪些功能的。根据谷歌文档,后台任务不会被暂停,它只会推迟到下一个维护窗口。如果是这种情况,应用程序应该能够打印在打瞌睡期间错过的所有应用程序。但正如观察到的那样,应用程序只会在维护窗口期间打印日志。这是将打破预期的行为。
白名单是一个不错的选择,但应用程序仍会受到打盹模式的影响。即使用户明确选择不限制应用行为的原因是什么?当应用程序在不同的设备操作系统、制造商等中表现不同时,这非常令人沮丧。
对不起这个故事。我想了解有什么方法可以在不更改现有实现的情况下完全禁用打瞌睡和待机模式?我已经浏览了各种文档,但没有办法达到 100%。请分享您的想法
我正在使用 WorkManager 来安排我的通知,当我的智能手机处于活动状态时它可以工作,但是当我的智能手机处于待机状态时它不起作用。为什么?有一些限制让我这样做吗?管他呢?
CoreActivity.java中的方法notifyPush
public static void notifyPush(String message, Context context)
{
//codice di un altro programma
// Make a channel if necessary
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
CharSequence name = Constants.VERBOSE_NOTIFICATION_CHANNEL_NAME;
String description = Constants.VERBOSE_NOTIFICATION_CHANNEL_DESCRIPTION;
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// Add the channel
NotificationManager notificationManager =
(NotificationManager) …Run Code Online (Sandbox Code Playgroud) android push-notification android-doze-and-standby android-workmanager
我正在使用 WorkManager 库来安排后台任务,并为了防止应用程序休眠,从应用程序中打开电池优化部分,以便用户手动禁用我的应用程序的优化。问题是,即使选择了“不优化”选项,应用程序仍然处于休眠状态并且工作尚未完成。此外,当通过设备设置中的应用程序信息页面打开电池设置时,它会显示“已优化”,即使它在上一个活动中已更改为“不优化”。
此外,通过代码打开的电池优化页面包含包括系统应用程序在内的所有应用程序的列表,而通过应用程序信息打开的电池优化页面仅包含已安装应用程序的列表。
有没有办法通过代码进入第二个电池优化页面。因为如果禁用优化,应用程序就可以正常工作。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud) android android-doze-and-standby android-doze android-workmanager
我有一个旧的 VoIP 应用程序,我想为其提供 Android 新的瞌睡和待机模式支持。我有自己的消息传递/信令机制,但无法使用 Android 的 GCM 功能。该文档指出,将应用程序列入白名单将允许使用自己的信号机制并使应用程序在打盹模式下保持活动状态。
此外,我正在使用setExtract()并setRepeating()当前保持 XMPP 的持久连接保持活动状态生成 keepAlive 警报。如果我添加setExactAndAllowWhileIdle新版本,它会声明 - 每 15 分钟最多触发一次警报。但我需要每 12 秒间隔生成 1 个。我浏览了 Android 文档,SO 中的许多线程,并找到了一篇关于它的文章。通过将应用程序列入白名单并使用AlarmManager的新 API ,我想要实现的目标似乎并不完全可行。
我能做些什么来保持我的功能和以前一样?在瞌睡和待机模式下保持应用程序活动,以 12 秒的间隔生成警报警报以保持连接活动并保持网络连接打开?
android alarmmanager android-6.0-marshmallow android-doze-and-standby
我正在开发一个应用程序,它使用AlarmManager在后台生成一些服务.时序对我们的应用程序非常重要,功能不能等待下一个维护窗口发生.要求用户将应用程序列入白名单不是问题,但不能解决暂停警报的问题.电池消耗也不是一个大问题.
我想到的第一个可能的解决方案是生成一个始终运行的前台服务来处理服务的重新安排而不是AlarmManager,但这样做会改变我们应用程序的大部分基础结构,对我们来说是不可行的.
我刚刚实现的当前修复是发送高优先级推送通知,并在接收消息时,完全唤醒锁定并打开屏幕以打破打盹模式.
我想知道是否有另一种打破打盹模式的方法?也可以不用唤醒锁?实施上述解决方案会产生一些可能的后果吗?
PS我正在使用UrbanAirship进行推送通知.
android android-6.0-marshmallow android-doze-and-standby android-doze
我必须测试我的应用程序在打盹模式下的行为方式.根据文档,我首先必须通过在终端中输入以下命令使设备认为它已被拔掉:
$ adb shell dumpsys battery unplug
Run Code Online (Sandbox Code Playgroud)
然而,没有任何反应,它记录:
找不到服务:电池
我该怎么办?
android adb android-6.0-marshmallow android-doze-and-standby android-doze
android ×13
android-doze ×5
adb ×2
alarmmanager ×1
android-wifi ×1
doze ×1
firebase ×1
performance ×1