问题标签 [battery-saver]

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 投票
0 回答
307 浏览

android - Android 节电模式期间无法在后台加载 Firebase 通知(数据消息)的图像

我正在使用 FCM 数据消息将通知推送到我的 Android 应用程序。所以基本上,我的数据负载将包含通知标题、消息和图像 URL 等信息。每个通知的图像 URL 都会不同。从 Firebase 消息服务接收数据消息后,我立即发布通知,然后对图像进行额外请求(使用 AsyncTask)。获取成功后,如果通知仍处于活动状态,我将更新通知。关于如何使用 FCM 通知用户的Android 博客

从 Android 9 开始,他们对省电模式进行了一些改进,从而产生了更多限制。因此,在省电模式下,我为获取图像所做的额外请求不断失败(SocketTimeOutException)。我已经在 Pixel 和 OnePlus 6 上对此进行了测试,并且无法在两个设备上加载图像(在省电模式期间)。

我尝试使用 Work Manager/Job Scheduler 执行其他请求,但没有成功。

而且我的应用程序不属于可接受的白名单用例(电池优化异常)。

有没有其他方法可以在后台成功加载图像以获取通知?任何帮助将不胜感激。谢谢。

0 投票
0 回答
19 浏览

android - 有没有办法查看手机上次进入省电模式的时间?

在我的情况下,我在 Pixel 2 上使用 Strava 应用程序,并注意到我的手机在运行结束时处于省电模式。我认为这是我通常的跑步路线与之前在同一应用程序上的跑步相比相差 0.2 英里的原因。有没有办法查看电话日志以了解我何时可能不小心将电话置于省电模式?我想知道在没有充分利用 GPS 的情况下我的跑步有多少。

我在曲折的小路上奔跑,树木茂密,海拔高度变化,因此我需要完整的 GPS 功能。

0 投票
1 回答
548 浏览

android - 省电功能可防止 WorkManager 被执行

华为、小米、三星的一些机型,或者我知道的大多数设备,在他们的系统中都有 MIUI、EMUI,默认情况下会打开省电功能和自动“优化”。最近我创建了一个重要的工作人员,但我的设备(华为 P20 Lite)有这个内置的功能,可以防止作业运行(它甚至显示系统阻止了执行),除非我去那个面板让应用程序自己在后台执行。

在生产环境中,我们不能告诉用户转到此菜单并让我们在后台运行(仅仅是因为我们不知道这些省电功能有多少变化),应用程序本身不会在后台运行在大多数情况下。但是,该工作人员仍然应该执行,因为该任务非常重要。

两个问题:

1) 粗略估计,有多少百分比的设备会阻止执行工作管理器任务?

2)可以针对这种情况应用任何解决方法吗?

任何帮助表示赞赏,谢谢。

0 投票
1 回答
439 浏览

android - 手机空闲时,Android 传感器不会收集数据

我正在尝试开发一个适用于 Android 的应用程序,在该应用程序中,我从多个传感器(如果设备上可用)获取数据并将其写入文件,稍后将对其进行分析以用于某些用途。我面临着几个问题,一个我可以忽略的小问题和一个我无法解决并导致应用程序无法正常运行的主要问题。

- 小问题

我正在从以下位置收集数据:加速度计、线性加速度计、陀螺仪和磁力计以及 GPS,但它们的工作方式完全不同,并且只能以低得多的频率进行采样,所以我暂时忽略它。我通过为每个传感器实现一个监听器来收集数据:

我使用以下方法将频率设置为~50Hz:

收集数据时,我知道频率不可能 100% 稳定,但奇怪的是它在每个传感器(大约 50Hz)上都或多或少地保持稳定,除了加速度计,大部分时间它以 100Hz 采样并且有时会下降到 50Hz。

有什么我可能做错了或有什么方法可以控制吗?到目前为止,我尝试过的每台设备都发生了这种情况,尽管它们的行为方式并不完全相同。

- 主要问题

我将信息写入文件,首先将我从传感器获取的所有内容写入字符串,然后每隔 X 秒,将字符串上的内容写入文件并清除它,以便传感器侦听器可以继续写入但它不会变得无限长。

我这样写在字符串上:

然后使用以下命令将其保存到文件中:

在监听器中,每次我停止监听时,我都会将“initTime”设置为 -1,因此样本总是从 0 开始,一直到监听周期的持续时间(以毫秒为单位)。(忽略 DELIMITER 只是格式问题)。

我的主要应用程序破坏问题如下:

在大多数手机中(一些幸运的手机可以完美运行)1 或 2 件事情都失败了。

在某些情况下,在闲置一段时间后(例如锁定并放在口袋里),传感器会停止记录数据,因此应用程序只会写入空白值,直到我再次唤醒手机。

在其他情况下,更糟糕的是,不仅传感器停止记录数据,而且计时器/写入文件似乎也停止工作,当手机再次唤醒时,它会尝试写入它应该写入的内容没有工作并且弄乱了所有的时间戳,在“过去”的不同点写入相同的样本,直到它赶上当前时间。(如果您将其可视化为图表,它基本上看起来好像数据收集回到了过去)。

有什么方法可以确保应用程序在任何情况下都能继续工作,无论手机是否被锁定、打瞌睡、应用程序是否最小化、在后台、前台等?

我尝试了一种我在谷歌上搜索的方法,该方法包括设置和警报以每隔 X 秒“唤醒进程”(无论我设置什么时间,它每分钟最多只能工作一次)。我看到每次警报响起的几毫秒内,它再次捕获样本但随后立即进入睡眠状态,它并没有让手机在更长的时间内保持“清醒”。它没有解决任何问题,即使在短时间内强制传感器收集数据,它也只能帮助唤醒传感器,定时器/写入文件的问题仍然存在。

希望有人能阐明如何让手机无论如何收集数据,我一直在尝试我能想到的一切,但我一无所获。对不起,文字砖,但我真的不知道如何用更短的方式解释它。

PS:我发现打开省电模式会让情况变得更糟,即使在通常可以正常工作的手机上,它也开始把事情搞砸了。所以另一个问题是......我怎样才能阻止它干扰?

0 投票
1 回答
2429 浏览

android - 前台服务在 Android 10 中被杀死

在 Android 10 中,一些制造商在电池优化设置中提供了新功能(见图)。屏幕关闭一段时间后,我的前台服务被操作系统杀死。

我已经使用了带有通知的前台服务。当所有设备的屏幕都打开时,此代码运行良好。我在具有 android 10 操作系统的 OnePlus 和 realMe 设备中面临这个问题。

我想知道,有什么办法可以解决这个问题吗?有什么方法可以知道我的设备有这种设置吗?

感谢帮助!

一加7

0 投票
1 回答
212 浏览

android - 后台服务在android R中以省电模式停止

我写了一个安卓应用程序,它通过改变电量来检查电池电量,并在电量达到一定值时发出警报。我在我的应用程序中使用了广播接收器和后台服务。它在所有 android 版本中都能正常工作,但在 android R 服务中,当电池保护模式打开时会停止。我在几个具有不同 android 版本的模拟器和真实设备上测试了我的应用程序,并且工作正常,但在 android R 中有问题。有没有办法阻止服务停止? 

我的服务类:

0 投票
0 回答
122 浏览

java - Android Studio Alammanager 处于省电模式

我需要一些帮助。

只有当我关闭应用程序的电池优化(节省)模式时,Alarmmanager 才对我有用。(具有此权限:“android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”)

我该如何解决它,或者是否有可靠的替代解决方案?我需要的只是一个每天在给定时间绝对调用的函数。我下载了一个不需要这个权限的闹钟应用,也不需要关闭这个电池优化模式。

(我用三星手机、Android 9、One UI 1.0 测试了我的应用程序)

预先感谢您的帮助!

0 投票
1 回答
99 浏览

android - 如何让应用程序通过 Ultra Battery Saver 模式/Adb shell 卸载 Ultra Battery Saver 运行?(无根)

我正在尝试禁用在没有 root 访问权限的情况下在 Miui 11 上启动超级省电模式的选项。是否有可能做到这一点?我试图卸载 com.miui.securitycenter 直到第一次重新启动。然后它进入一个引导循环,手机需要被擦除。

或者,如果我可以让应用程序永久运行,即使在超级省电模式下也会很有帮助。

0 投票
1 回答
685 浏览

android - Android - 禁用 Forced DozeMode 或 AppStandByMode

我有一个使用 aForegroundService将位置更新发送到服务器的应用程序。基本上是一个跟踪器。

ForegroundService有一个Handler定期(使用postDelayed)执行一段代码来发送位置。

当应用程序处于前台甚至后台时,这工作得非常好,但我开始注意到手机锁定时出现延迟,屏幕关闭大约 15 分钟。我的意思是,15 分钟没有用户活动,也没有插入充电器。

这发生在Android Q (v10)设备上。我假设这也会发生在任何运行 Oreo 的设备上。

让我们说清楚......我的应用程序每 30 秒发送一次位置,但是当输入我认为是DozeModeAppStandByMode时,它​​会继续发送位置,但每 2 分钟(或多或少)。如果我打开屏幕或插入充电器,它会立即恢复到 30 秒的速度。这就是让我对DozeModeAppStandByMode 感兴趣的原因。此外,如果我不碰手机,但插入充电器,那么这永远不会发生。

如前所述,我很确定DozeModeAppStandByMode正在启动,我知道我可以将我的应用列入白名单以防止这种情况发生。但在更进一步之前,我想重现这一点,而无需每次我想测试我的应用程序的行为时等待这 15 分钟。

所以我“用谷歌搜索”了我如何强制这样做,这就是我发现的:

对于DozeMode(见来源

adb shell dumpsys 电池拔掉

adb shell dumpsys deviceidle step deep

并继续执行最后一条命令,直到达到IDLE状态。

对于AppStandByeMode(见来源

adb shell dumpsys 电池拔掉

adb shell am set-inactive packageName true

并使用其他命令查询状态:

adb shell am get-inactive packageName

我确认它返回Idle=true

我什至也按照其他博客的建议进行操作,发布:

adb shell dumpsys deviceidle force-idle

我虽然我没有进入这种模式,但现在看来我是而且我无法摆脱它......查看更新

更新

起初我以为我没有进入打盹模式......现在我可以确认我进入了,但它总是立即触发。(不再等待那 15 分钟)

每当我锁定手机并且屏幕熄灭时,它会自动进入打盹模式并开始间隔位置更新。我插上充电器,然后在 30 秒后再次发送。

我试过:

adb shell dumpsys deviceidle 解除强制

adb shell dumpsys deviceidle 禁用

adb shell dumpsys 电池重置

还是一样。

还:

  • 手机关机和电源备份
  • 卸载应用程序
  • 在应用程序设置中将电池优化更改为不优化

我错过了一步吗?

0 投票
0 回答
18 浏览

android - 如何通过自定义 Android 应用程序获取应用程序的一些能耗值?

每个像小米MIUI这样的Android固件外壳都有能耗监控器,可以将能耗绑定到进程或封装。如何通过自定义 Android 应用程序获取这些数据?有任何API吗?