REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 正确的做法

REQUEST_IGNORE_BATTERY_OPTIMIZATIONS how to do it right

我在前台模式下有 IntentService 任务,但在 Android M+ 中,任务在打盹模式下停止。如果应用程序使用 intent 将自己设置在白名单中,我读到 Google 将被禁止。但是,如果我使用权限并检查 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);
                }
            }
        }

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

Permission an application must hold in order to use ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. This is a normal permission: an app requesting it will always be granted the permission, without the user needing to approve or see it.

所以,删除所有代码。

I don't see my app in whitelist.

显然是因为用户没有把你加入白名单。

请求 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 授予您从安全角度出发,使用 an ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 启动 activity 的权限。请务必将您的应用程序包作为 Uri:

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

用户将被带到一个屏幕,他们可以在该屏幕上表示他们愿意在您的应用程序上暂停部分打瞌睡模式效果。

How can I add the app in whitelist without banned?

如果您不想被禁止,请不要执行任何操作。在您的应用程序中添加一些以 an ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent 开头的 activity。这会将用户带到应用程序的整体列表,用户可以在其中切换哪些应用程序在白名单中,哪些不在白名单中。这不需要任何许可。

manifest中请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS的行为是what may get you banned.

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

不喜欢的组合