您好: 我很好奇如何展示这个对话框。当我按下允许时,此应用程序的电池优化功能被禁用。这是一个新的android api
答案 0 :(得分:4)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
Intent intent = new Intent();
intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("package:" + packageName));
context.startActivity(intent);
}
}
此外,您需要在清单
中添加以下权限<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
答案 1 :(得分:2)
这是API 23(Marshmallow)与App Standby一起引入的新Doze Battery Optimization功能的一部分,旨在优化应用程序处于后台(应用程序待机)或设备运行时的电源和资源使用情况长期处于睡眠状态(打瞌睡)。
以下是Android Developer's site page:
的解释具体来说,在App Standby模式下,系统会在用户未主动使用应用程序时确定应用程序处于空闲状态。当用户在一段时间内未触摸应用程序时,系统会做出此确定,并且不适用以下任何条件:
当用户将设备插入电源时,系统会从待机状态释放应用,允许他们自由访问网络并执行任何待处理的作业和同步。如果设备长时间处于空闲状态,系统允许空闲的应用程序网络每天访问一次。
因此,这意味着从API 23(Marshmallow)开始,设备可能会主动将您的应用程序置于待机状态,从而阻止网络访问(比如同步等任务)和限制(或禁用)后台执行。现在,对于大多数应用程序,这种行为很好,或者您可以轻松优化此类行为,但对于某些应用程序,这可能会导致一些意外行为,尤其是对于优化或使用不佳的应用程序非标准同步策略或其他一些后台同步/执行方式。 因此,为了避免这种情况,用户可以明确地将应用程序标记为非优化,并且系统将回退并且不会将应用程序置于待机状态,尽管这会导致较差的用户体验并且您不应该这样做这适用于可以优化的常规应用。