此问题与将于本月底最终发布的 Android 6.0 Preview 3 有关。
我正在 Nexus 5“hammerhead”上的 Google 预览版 3 中测试 Android 6.0 中的一些内容。
新功能是“打盹模式”——类似于网络禁用和手机休眠时的深度睡眠模式,只有短信、电话或高优先级 GCM 消息才能唤醒它。但就像 WhatsApp - 在打盹模式下,它会在 2 小时或更长时间后收到消息,具体取决于计时器。但是有一个名为“白名单”的“未优化”应用程序列表,您可以在其中手动添加应用程序。
好的,我想找到一种方法,无需用户交互即可以编程方式将我的应用程序添加到设备中电池设置中存在的“白名单应用程序列表”中。
尝试使用反射进入它我发现:
在 android.os.IDeviceIdleController 中有一个方法:
public abstract void addPowerSaveWhitelistApp (String packageNameOfApp)
但这是一个接口......所以我们不能制作接口的实例。
目前还没有关于这个接口、方法或任何继承树的文档。
也许你知道我应该在哪里寻找以编程方式添加我的应用程序的可能性?
还有一个方法
public abstract boolean isPowerSaveWhitelistApp (String packageName)
我认为应该可以以某种方式访问?!检查应用程序是否存在于白名单中,也许在最后希望要求用户将其添加到白名单中。
所以我的问题是,你们有没有人试图做出更好的结果?因为我被卡住了,我认为这是一个死胡同。
更多信息:https : //newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze
添加权限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
请求将您的应用列入白名单
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Intent intent = new Intent(); String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); startActivity(intent); } }