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

3

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

我已经成功地在我的应用程序中使用运行时权限添加了权限

这些参考资料

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;
        }
    }

安卓提供的最佳实践

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

陈述以下内容:

1)考虑使用Intent

2)只请求所需的权限

3)不要让用户感到不堪重负

4)解释为什么需要权限

现在根据上述要求,我们仅在需要时请求特定活动所需的权限

然而这些最佳实践并未说明权限的频率,即这些权限需要显示多少次或者是否只能显示一次

现在我面临的问题是:

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

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

3)每次使用应用程序时,我们需要调用权限访问吗

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

1个回答

5

1) 您所引用的文档中表示:

如果您的应用程序需要危险权限,那么每次执行需要该权限的操作时,必须检查您是否拥有该权限。用户始终可以撤消权限,因此即使应用昨天使用过相机,也不能假设今天它仍然拥有该权限。

这就是为什么你每次都必须请求它的原因。

2) 你不能存储权限。Android决定记住授予的权限的时间长度。

3) 是的,以上引用的内容就是在说这个。

4) 你让Android管理权限。你自己不需要做任何事情,只需在需要时检查或请求它们即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接