问题标签 [android-doze]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
87 浏览

android - Doze 是否适用于 Marshmallow 设备上具有 minSdk 21 的应用程序?

我的应用程序有 minSdkVersion 21 targetSdkVersion 25 compileSdkVersion 25。我正在使用 AlarmManager 进行一些关键的定期检查——这是客户的要求;他们不希望检查被跳过或延迟。

我不确定 Marshmallow 或 Nougat 设备上的 Doze 会如何影响我的应用程序和这些警报。更准确地说,操作系统会应用 SDK21 规则并为我的应用程序跳过打盹,还是操作系统会强制执行打盹?

如果 Marshmallow 将强制打盹,我想对这些警报使用 setAndAllowWhileIdle(),但我无法这样做,因为 minSDK 是 21。

任何帮助将不胜感激!

0 投票
1 回答
4088 浏览

android - 打盹模式处理

我正在开发一个使用 AlarmManager 在后台生成一些服务的应用程序。时间对我们的应用程序非常重要,功能不能等待下一个维护窗口的出现。要求用户将应用程序列入白名单不是问题,但不能解决暂停警报的问题。此外,电池消耗也不是什么大问题。

我想到的第一个可能的解决方案是生成一个始终运行的前台服务来处理服务的重新调度,而不是 AlarmManager,但这样做会改变我们应用程序的大部分基本结构,对我们来说是不可行的。

我刚刚实施的当前修复是发送高优先级推送通知并在接收到消息时,采取完全唤醒锁定并打开屏幕以打破打盹模式。

我想知道是否有另一种打瞌睡模式的方法?也可以不使用唤醒锁吗?实施上述解决方案会产生一些可能的影响吗?

PS 我正在使用 UrbanAirship 进行推送通知。

0 投票
1 回答
454 浏览

android - Xamarin MediaPlayer 被 Android 打盹模式打断

我们有一个使用 MediaPlayer 在 Xamarin (Native Android App) 中开发的音乐应用程序 (mp3)。将列出应一首一首播放的歌曲列表。大约 10 分钟左右后,玩家停止。手机解锁后,播放器开始播放下一首曲目。似乎 Nougat Doze 以某种方式干预了 Player。如果我为我的应用手动禁用电池优化,则没有问题。

是否有任何解决此问题的方法,而不是让每个用户手动更改“电池优化”选项。我想知道 Spotify 等其他应用程序如何在不更改任何设置的情况下连续播放歌曲。请帮忙!

0 投票
0 回答
187 浏览

android - 网络音乐播放器在设备锁定时无法加载歌曲(打盹模式?)

我正在构建一个播放互联网歌曲的音乐播放器。我注意到,通常,当一首歌曲结束并且必须加载另一首歌曲时,该应用程序不会播放下一首歌曲。

我等待,等待,等待,当我最终决定解锁手机以了解正在发生的事情时。令人惊讶的是,在设备解锁后立即开始播放以下歌曲。

第一次我以为只是巧合,但经过多次相同的事情发生,现在我认为这是系统性的。我能想象的唯一原因是打盹模式(我使用的是 Android 7.1 的设备),我已经将应用程序配置为使用WakeLock(a PowerManager.PARTIAL_WAKE_LOCK) 但它似乎没有太大帮助。

编辑
我确定问题是打盹模式。如果设备已插入或屏幕处于打开状态(或两者都打开),问题就会消失。如果我将我的应用程序添加到未优化的应用程序列表中,它也可以正常工作。

0 投票
2 回答
3016 浏览

android - Android Nougat PhoneStateListener 未触发

在 Android(目标 25)中,我有一个后台服务,在 onCreate 函数中我初始化了一个电话状态监听器。它在 Nougat 之前的 Android 版本上运行良好,但在 Nougat 中它不起作用,即使授予了权限。

我不知道是什么问题,看起来电话管理器未注册,因此未触发 onCallStateChanged。我的猜测之一是 Android M 上引入的打盹功能,但仍然......即使没有找到“工作中”的手机,此代码在 Android 6 上也能正常工作

0 投票
1 回答
384 浏览

android - Android打瞌睡报警窗口

我想将我的应用程序更新到 Android 6,并使用警报器来调度我的后台服务。对于我的服务,重要的是在大约一个小时的窗口中被唤醒。它必须在那个窗口中醒来,所以一旦设备退出打盹,它就不会醒来,但我不在乎它什么时候在窗口中醒来。

我现在使用 .setWindow 来设置闹钟。当我希望它在打盹模式下工作时,我必须使用什么?没有 setWindowAndallowWhileIdle

据我所知,应该首选设置窗口而不是固定时间,尤其是在打盹模式下

0 投票
1 回答
865 浏览

android - 设备在收到 FCM 高优先级消息时会保持唤醒状态多长时间?

我在 Firebase 文档中读到,如果设备从 FCM 接收到高优先级消息并且网络连接将打开到应用服务器,它将被带出睡眠状态。我已经测试了这种行为,并且我知道它确实可以将设备从打盹中唤醒。

我的用例是我需要使用推送消息的数据标签中的设置键下载图像。会有多个这样的推送通知,我会将所有这些消息保存在数据库中。

说十分钟后,通知实际上会被触发到用户的屏幕上,以避免用户在立即打开网络连接时收到大量其他通知。

我的问题本质上是:

  1. 设备的唤醒时间是否足以让我下载图像并将其保存到数据库(图像大小最大为 100kb)?

  2. 或者我应该使用 JobScheduler API 将下载推迟到以后,以确保网络连接?

0 投票
1 回答
277 浏览

android - 在android中每x分钟运行一次IntentService的正确方法,包括打瞌睡

基本上我被卡住了,因为 Android 6.0+ 中添加了电池的“改进”。我的应用支持 11+ 的 API

设想

这是我的场景:我的应用程序从 3rd 方服务器的 Web 服务中获取数据。由于它不是我的服务器,我无法控制何时添加或删除数据。数据的可用性各不相同。我希望能够触发 IntentService 来获取数据,例如在接下来的 6 小时内每 30/60 分钟一次。通过这种方式,我可以让我的应用程序中的数据涵盖数据从服务器不可用的情况。当然,即使我的应用程序已关闭,这也需要进行。

您可能会说这对电池不友好,但它是高级用户手头的一个选择。

到目前为止我做了什么

我在设置方面遇到了很多困难Alarms。虽然设置重复闹钟似乎是让它工作的最简单和最方便的方法,但事实证明它只在 android 5.0 之前可靠地工作。

从引入 开始Doze,根据文档,警报被推迟到maintenance window并且由于这些窗口在 1-2-4 等小时出现,因此不适合我的需要。

我放弃了使用 setrepeating并尝试使用在执行中Alarm重新安排的 one time。IntentService从测试setExact来看似乎运行不佳,但随后尝试setExactAndAllowWhileIdle了确实在正确的时刻触发但如果处于Doze模式下,它没有网络连接访问,使其无用。

即便如此,我不确定当警报延迟setRepeatingsetExact延迟但设备在下一个维护窗口之前唤醒时会发生什么......

基本上现在我被卡住了,机制不起作用,鉴于应用程序支持的 android 版本和要求,我不知道还能选择什么。

LE:实际上我不知道在 android 上设置后台作业的好方法,甚至不包括 Doze。我的意思是,我们确实有JobScheduler这似乎是一件好事……但是,嘿,它仅在 Android 21 上可用,并且不向后支持……我的意思是,真的,有一件简单的事情要做,我已经在等待到目前为止几天。

0 投票
0 回答
61 浏览

android - 如果由于打盹模式而没有运行,有什么方法可以防止警报触发?

这种打盹模式让我很难实施适当的警报系统。基本上我想让我的用户每 15 或 30 分钟运行一次 web 服务调用。因此,假设用户将应用设置为每 30 分钟运行一次警报。虽然该设备是正常使用的,但警报会或多或少准确地触发(我正在使用setRepeating),但对于我的目的来说已经足够了。

根据文档,当设备打瞌睡时,我的重复警报不会触发,但是当设备退出打瞌睡模式时,所有未运行的警报都会一个接一个地运行(或类似的)。所以我在早上结束时可能会一个接一个地发出 4-6 个警报,所有警报都从 web 服务中获取相同的数据。或者当维护窗口发生时同样的事情......

有没有办法告诉打盹模式,如果我的警报没有在要求的时间触发,根本不运行它?或者如果有多个警报没有触发,只触发最后一个?

LE:我的代码有一个错误,导致警报过于频繁,这就是为什么我有一种印象,推迟的警报都会一个接一个地运行……

0 投票
1 回答
2506 浏览

android - Android 7.0 Doze 是否停止所有通知?

我正在尝试学习 Android 7.0,但我看到了这条评论。

“当设备使用电池供电并且屏幕已关闭一段时间后,设备会进入 Doze 并应用第一个限制子集:它会关闭应用程序网络访问,并推迟作业和同步”

我不太明白。如果它在打盹模式下停止网络,我如何获得whatsapp 或电子邮件推送消息。在这种模式下是否也限制了所有?

谢谢你的评论