问题标签 [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.
android - 安卓电池消耗问题
我开发了一款适用于所有设备的 Android 应用程序,但与其他设备相比,Galaxy S8 仅消耗更多电池。如何处理 S8 的电池消耗?有任何工具可以让我获取我的应用程序的电池消耗详细信息。
android - 省电+电话意图=>没有互联网?
注意:事实证明,原始问题的假设不正确。在底部查看有关其编辑的更多详细信息。
现在是关于节电模式,而不是节电模式和打盹模式。它也不是关于 Service&BroadcastReceiver,而只是 BroadcastReceiver。
背景
从 Android Lollipop 开始,Google 引入了新的手动和自动方式来帮助节省电池:
“打盹”模式和“省电模式”。
在某些情况下,由于这些技术,应用程序可能无法访问 Internet。
问题
我正在开发一个需要使用在特定情况下触发的后台服务访问 Internet 的应用程序,如果收到重要的信息,它会显示一些 UI。
作为用户,我注意到在某些情况下,它无法访问 Internet。
应用程序是否可以访问互联网的检查是这样的:
问题是我需要检查为什么有时会返回 false,因此如果失败,我们应该告诉用户(可能通过通知)数据无法访问,因为设备限制了应用程序,并为用户提供从电池优化中将应用列入白名单。
我不确定哪些会影响这一点:打瞌睡、省电模式,或两者兼而有之,如果总是这样,对于所有设备,在所有情况下。
我试过的
我找到的是如何查询打盹模式和省电(省电)模式:
我想我还找到了一种在连接到设备时检查它们的方法:
省电:
打瞌睡状态:
和 :
问题
简而言之,我只想知道无法访问互联网的原因是否确实是因为没有互联网连接,或者应用程序当前是否由于某些电池优化而受到限制。
仅在受到限制的情况下,我可以警告用户,如果他没问题,该应用程序将被列入白名单,以便它仍然可以正常工作。
以下是我对此的疑问:
以上哪项阻止了应用程序的后台服务访问互联网?都是造成的吗?它是特定于设备的吗?“互动”会影响它吗?
如果已经有办法进入“轻度”和“深度”打瞌睡状态,那么“强制空闲”是什么?还有没有办法将打盹模式重置为正常?我尝试了多个命令,但只有重新启动设备才真正让它恢复正常......
我创建的 BroadcastReceiver 是否允许正确检查?是否会在所有情况下触发由于所有特殊情况而拒绝访问 Internet?我不能在清单中注册它是真的吗?
是否可以检查无法访问互联网的原因是否确实是因为没有互联网连接,或者应用程序当前是否由于某些电池优化而受到限制?
Android O 上特殊情况下后台服务的互联网连接限制有变化吗?也许我应该检查更多的情况?
假设我将服务更改为在前台运行(带有通知),这是否涵盖所有情况,并且始终可以访问 Internet,无论设备处于什么特殊状态?
编辑:似乎这根本不是服务的错,而且它也发生在省电模式下,没有打盹模式。
该服务的触发器是一个侦听电话事件的 BroadcastReceiver,即使我在其onReceive
函数上检查 Internet 连接,我也看到它返回 false。从它启动的服务也是如此,即使它是前台服务。查看 NetworkInfo 结果,它是“BLOCKED”,它的状态确实是“DISCONNECTED”。
现在的问题是,为什么会发生这种情况。
这是一个新的示例 POC 来检查这一点。要重现,您需要打开省电模式(使用./adb shell settings put global low_power 1
命令或以用户身份),然后启动它,接受权限,关闭活动,然后从另一部手机呼叫此手机。您会注意到,在活动上,它显示有 Internet 连接,而在 BroadcastReceiver 上,它说没有。
请注意,连接到 USB 数据线时可能会自动关闭省电模式,因此您可能需要在未连接设备时尝试一下。与启用它的用户方法相反,使用 adb 命令可以防止它。
示例项目也可以在这里找到,尽管它最初是关于打盹模式的。只需使用节电模式,即可查看问题是否发生。
电话广播接收器
显现
MainActivity.java
xamarin.ios - 如何减少应用程序的电池使用量?
我正在开发一个应用程序,它每 10-20 秒跟踪一次用户位置。为了使其在后台和移动锁定阶段工作,我必须进行以下代码编辑:
在安卓中:
我添加了“Wake_Lock”的权限,并在 MainActivity.cs 中添加了一行代码,例如
在 iOS (AppDelegate.cs) 中:
这使得功能很好,它每 10 秒跟踪一次位置,即使在后台和移动设备被锁定,这很好。但是通过添加此代码,应用程序的电池使用量会急剧增加。
如果我做错了什么,任何人都可以帮助我,并建议我解决电池使用问题的任何想法。
android - 如何在安卓三星手机中启用省电模式
请给出一些示例或想法,以便以编程方式从 android 代码为三星设备和 moto 设备启用节电模式。或者,请给出一些示例,用于从应用程序将用户导航到节电模式设置页面。
android - Android 应用出现在电池优化白名单中,但实际上并不存在
背景:
我正在开发一个 Android 应用程序。当应用程序启动时,它会使用该isIgnoringBatteryOptimizations()
功能检查它是否被排除在电池优化之外。如果该函数返回 false,我将使用该REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
权限显示电池优化设置屏幕,用户应在其中将应用添加到白名单。
当我从 Android Studio 运行应用程序时,这一切都完美无缺。当我下载并安装候选版本时,麻烦就开始了。
请注意,我将描述的问题仅发生在我的两部手机中的一部上。该问题发生在运行 Android 7.0 的 Sharp 507SH 上。在同样运行 Android 7.0 的 Sony SOV32 上不会发生此问题。
问题:
当我下载并安装候选版本(不使用 Android Studio)并启动应用程序时,电池优化屏幕正常显示。但是,该应用程序似乎已立即列在“未优化”白名单中。通常,用户必须手动选择应用程序并添加它。但它出现在列表中。所以用户按下后退按钮返回应用程序,一切似乎都很好。但是,该应用程序实际上不在白名单中。应用程序每次启动时都会提示用户这一事实证实了这一点,即isIgnoringBatteryOptimizations()
仍然返回 false。
我可以通过首先进入电池设置并将其从白名单中删除,然后将其添加回来,将应用程序“真正”添加到白名单中。然后提示会消失。
c - linux上的C客户端-服务器应用程序和电池节省
有人可以解释一下,如何实现最有效的节电:我想编写一个简单的客户端-服务器应用程序。服务器定期向客户端发送消息(比如说“你好”),客户端只是显示它。如果客户端调用轮询/选择并等待传入消息,会发生什么?我会在网上(4g / wi-fi)腰部资源吗?或者应用程序应该偶尔休眠和唤醒以检查更新?可能是其他一些解决方案?
android - 如何降低电池电量消耗?
在我的应用程序中,我使用 Google 地图并从 onLocationChanged() 获取纬度,而它在后台运行并使用服务获取该值。
因此,我的应用程序消耗了大量的电池电量
如何减少应用程序的功耗?
android - 应用程序在 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 上冻结一秒钟
我正在开发一个需要有效工作服务的应用程序,因此为了避免打盹模式,我编写了代码,该代码将显示一个默认对话框,询问该应用程序是否会消耗更多的电池电量。但这里的主要问题是在显示对话框应用程序冻结一两秒钟然后继续之前。我想知道有什么问题。这是我写的代码 -
android - 屏幕关闭后如何保持播放活动
我有一个带有音频播放功能的应用程序,但在某些设备(主要是华为、三星、索尼)上,屏幕关闭时播放会停止。注意:Spotify、Play Music 等其他应用程序的播放不会停止
我找到了这个答案(对于华为设备),它建议要求用户在电池优化设置(电池管理器>受保护的应用程序)中启用“在后台运行”权限,但我想避免要求用户启用它。
是否有一些 API 可以为华为、三星、索尼或其他制造商以编程方式启用它?
是否可以检测应用程序是否没有此类权限?
编辑:播放在前台服务中运行并且应用程序持有唤醒锁
编辑 2:我已经联系了与此问题相关的华为支持。一旦解决,我将分享更多信息。