Android 6.0中的Android运行时权限(API级别23)最佳做法

123*_*567 3 permissions android

Android 6.0中的Android运行时权限(API级别23)最佳做法

我已成功将运行时间的权限添加到我的应用程序中

这些参考

http://developer.android.com/training/permissions/requesting.html

https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html

这是我用过的代码

private static final int PERMISSION_REQUEST_CODE = 1;

    switch (id){
                case R.id.check_permission:
                    if (checkPermission()) {

                        Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();

                    } else {

                        Snackbar.make(view,"Please request permission.",Snackbar.LENGTH_LONG).show();
                    }
                    break;
                case R.id.request_permission:
                    if (!checkPermission()) {

                        requestPermission();

                    } else {

                        Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();

                    }
                    break;
            }

private boolean checkPermission(){
        int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED){

            return true;

        } else {

            return false;

        }
    }

    private void requestPermission(){

        if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){

            Toast.makeText(context,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();

        } else {

            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show();

                } else {

                    Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show();

                }
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

android提供的最佳实践

http://developer.android.com/training/permissions/best-practices.html

声明以下内容

1)考虑使用意图

2)只询问你需要的权限

3)不要压倒用户

4)解释为什么你需要权限

现在,按照上述内容,我们仅在需要时询问权限,并仅针对该活动所需的特定权限

然而,这些最佳实践并未说明许可的频率,即说明需要显示这些权限的次数,还是只能显示一次

现在我面临的问题是

1)每次在应用程序中调用活动时,弹出权限,这些都发生在应用程序使用的特定会话中(如果在同一会话期间调用相同的活动,则在授予权限后不会调用该权限)

2)我们是否可以存储已授予的权限(即以共享首选项执行第一次检查的静态变量,以便不再一次调用权限)

3)每次使用应用程序时,是否需要调用权限访问权限

4)如果不允许共享首选项,我们如何更优雅地管理这些权限

Dou*_*son 5

1)您引用的文档说:

如果您的应用需要危险权限,则每次执行需要该权限的操作时,都必须检查是否拥有该权限.用户总是可以自由撤销权限,因此即使应用程序昨天使用了相机,也不能认为它今天仍然具有该权限.

这就是你必须每次都要求它的原因.

2)您无法存储权限.Android决定记住授予权限的时间.

3)是的,这就是上面引用的内容.

4)你让Android管理权限.除了检查或在需要时请求它们,您自己不做任何事情.