【问题标题】:REQUEST_IGNORE_BATTERY_OPTIMIZATIONS how to do it rightREQUEST_IGNORE_BATTERY_OPTIMIZATIONS 如何正确执行
【发布时间】:2017-07-01 14:43:01
【问题描述】:

我在前台模式下有IntentService 任务,但在 Android M+ 中,任务在打盹模式下停止。如果应用程序使用意图将自己设置在白名单中,我读到了谷歌被禁止。但是,如果我使用权限并检查 GRANT 或 DENIED,我会得到授予的结果,但什么也没有发生。我没有在白名单中看到我的应用程序。如何在不被禁止的情况下将应用添加到白名单中? (我在AndroidManifest.xml添加了权限)

if(Build.VERSION.SDK_INT>=23){
    int permissionCheck= ContextCompat
                    .checkSelfPermission(this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);

    if(permissionCheck == PackageManager.PERMISSION_DENIED){

        //Should we show an explanation
        if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)){
            //Show an explanation
            final String message = "";
             Snackbar.make(coordinatorLayoutView,message,Snackbar.LENGTH_LONG)
                     .setAction("GRANT", new View.OnClickListener() {
                         @Override
                         public void onClick(View v) {
                             ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS }, PERMISSION_REQUEST_CODE);
                         }
                     })
                     .show();

                }else{
                    //No explanation need,we can request the permission
                    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS }, PERMISSION_REQUEST_CODE);
                }
            }
        }

【问题讨论】:

    标签: android permissions android-6.0-marshmallow


    【解决方案1】:

    REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 不是dangerous 权限。您不需要或不想要任何代码。引用the documentation for REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:

    应用程序必须拥有权限才能使用 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS。这是一个正常的权限:请求它的应用程序将始终被授予权限,而无需用户批准或查看。

    所以,删除所有代码。

    我没有在白名单中看到我的应用。

    显然,这是因为用户没有将您添加到白名单中。

    请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 从安全角度授予您使用an ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 启动活动的权限。请务必将您的应用程序包包含为Uri

    startActivity(new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, Uri.parse("package:"+getPackageName())));
    

    用户将被带到一个屏幕,他们可以在其中表明他们愿意在您的应用上暂停部分打盹模式效果。

    如何将应用添加到白名单而不被禁止?

    如果您不想被禁止,请不要这样做。在你的应用程序中有一些东西以an ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGSIntent 开始一个活动。这会将用户引导至应用程序的整体列表,用户可以在其中切换哪些应用程序在白名单上,哪些不在白名单上。这不需要任何许可。

    在清单中请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS的行为是what may get you banned

    【讨论】:

    • CommonsWare,谢谢您的详细解答。这意味着我不需要许可,只创建意图?我说的对吗?
    • @Delphian:如果您想使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,将用户直接引导到特定于您的应用和白名单的页面,您需要在清单中请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,但您需要不需要使用运行时权限代码。如果您想避免该权限,请改用ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
    • 这在某些vivo、oppo设备上不起作用。
    【解决方案2】:

    注意对活动使用 Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent,这不适用于所有手机,您将收到 android.content.ActivityNotFoundException。特别是它不适用于运行 Android 6 的三星手机。我发现在这些手机上有效的唯一组合是在清单中声明 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,然后使用 Intent Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 启动一个活动。 IE。 Google 不喜欢的组合。

    【讨论】:

    • 你提到过像在意图中添加Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS。是添加到intent.setData 还是别的什么?
    • @Arun - 它像这样在 setAction 中使用.... intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    • 那么最终的解决方案是什么?我正在使用 oppo F1 (android 6) 但即使添加权限它也会崩溃
    • 使用 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 违反了有关可接受用例的 Play 商店内容政策,如 [developer.android.com/training/monitoring-device-state/… 中所述。 ]
    • > 注意:除非应用的核心功能受到不利影响,否则 Google Play 政策禁止应用请求直接豁免 Android 6.0+(打盹和应用待机)中的电源管理功能。所以我不确定它是否违反了受它影响的应用程序......
    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2019-09-17
    • 1970-01-01
    • 2014-03-13
    • 2014-03-19
    • 2011-10-22
    相关资源
    最近更新 更多