如何以编程方式关闭棉花糖设备中特定应用程序的打盹模式
Posted
技术标签:
【中文标题】如何以编程方式关闭棉花糖设备中特定应用程序的打盹模式【英文标题】:how to turn off doze mode for specific apps in marshmallow devices programmatically 【发布时间】:2016-09-30 19:07:42 【问题描述】:Marshmallow API 与以前的 android 操作系统有很大不同。当屏幕关闭时,设备处于打盹模式并且无法同步网络。因此,为了使用网络进行后台操作,我们必须防止打瞌睡模式。
【问题讨论】:
您想要的都是不可能的,除非通过自定义 ROM 或可能在有根设备上。用户可以直接从“设置”应用管理电池优化白名单。 我看到 Playstore 中的一些应用程序正在控制打盹模式。他们是怎么做的? app 被命名为“Doze”。它似乎维护了一个它不影响的应用程序白名单。 您无法以编程方式将应用添加到白名单。您可以要求用户将您的应用添加到白名单中,但 doing so may get you banned from the Play Store(如果您计划将应用分发到那里)。 我认为这个问题很有用。我正在开发的应用程序是商业用途,不会分发到 Google Play.... 现在客户抱怨屏幕关闭时没有网络活动... 【参考方案1】:在 manifest.xml 中添加以下权限
<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
调用下面的方法
public void turnOffDozeMode(Context context) //you can use with or without passing context
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName)) // if you want to desable doze mode for this package
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else // if you want to enable doze mode
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
context.startActivity(intent);
或者您也可以使用以下场景...
以编程方式将 Android 应用程序列入白名单的方法如下:
boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
if(!isIgnoringBatteryOptimizations)
Intent intent = new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, MY_IGNORE_OPTIMIZATION_REQUEST);
上面的activity的启动结果可以通过以下代码来验证:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == MY_IGNORE_OPTIMIZATION_REQUEST)
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
if(isIgnoringBatteryOptimizations)
// Ignoring battery optimization
else
// Not ignoring battery optimization
【讨论】:
以上是关于如何以编程方式关闭棉花糖设备中特定应用程序的打盹模式的主要内容,如果未能解决你的问题,请参考以下文章