ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对Android运行时权限感到困惑

2019-10-12 07:29:15  阅读:224  来源: 互联网

标签:android android-permissions android-camera runtime-permissions target-sdk


因此,全新的android运行时权限让我感到困惑.我的应用当前正在编译并定位到版本23,这意味着我必须使用运行时权限.我的应用程序主要使用需要相机权限的相机API,因此在打开相机之前添加了运行时权限:

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED)
        {//ask permissions for camera
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    CameraPermissions);
        }
        else
        {//permissions attained now you can open the camera
            camera=Camera.open(getCid());
            camera.setPreviewCallback(this);
            initPreview(width, height);
            startPreview();
            startTimer();
        }

我还会检查何时停止相机:

       if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            camera.setPreviewCallback(null);
            camera.release();
            faceProc.release();
            faceProc = null;
            camera = null;
            inPreview = false;
            cameraConfigured = false;
        }

许可请求的处理方式如下:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case CameraPermissions: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                StartUpCam();
            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("How is this app going to work if you rejected the camera permission.... DUHHHH!!")
                        .setTitle("Rejected");
                builder.setPositiveButton("Exit App", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        //close application
                        closeApp();
                    }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
            }
            return;
        }
    }
}

因此,在发出请求时,它会调用StartUpCam,如果授予了权限,则它将尝试打开摄像头.所以这是我的问题,如果我添加此运行时权限,将检查这如何影响低于6.0的android设备?因此,版本5.0.1的手机还会提示您授予摄像头权限吗?如果使用运行时权限,是否必须删除清单文件中的摄像机权限?当前,我将相机权限和清单中的运行时权限一起保存在清单中,我不知道这是否正确.如果我将目标降低并将sdk编译为22而不是23,该怎么办?高于6.0的android设备将无法下载我的应用?如果我将其降低到版本22,则可以避免所有这些麻烦…

解决方法:

I also check when I stop the camera

如果您不尝试停止从未打开过的摄像机,则不需要这样做.如果用户在应用程序运行时撤消了该权限,则您的过程将立即终止.因此,您永远不会在正在运行的应用程序中失去权限.由于您已检查并具有打开相机的权限,因此您已经具有关闭相机的权限.

if I add this runtime permission checks how does this affect android devices lower than 6.0?

假设您具有清单中列出的权限,ContextCompat.checkSelfPermission()将在较旧的设备上返回PackageManager.PERMISSION_GRANTED.

So a phone with version 5.0.1 will also get a prompt to give camera permissions?

没有.

If I use runtime permissions, do I have to remove the camera permissions in the manifest file?

否.这些元素在所有Android版本上都是必需的.

What if I lower the target and compiling sdk to 22 instead of 23, will android devices above 6.0 won’t be able to download my app?

您的compileSdkVersion对您支持的Android版本没有影响. Android 6.0用户仍然可以下载您的应用.

如果将targetSdkVersion降低到22或更低,那也不会影响您支持的Android版本. Android 6.0用户仍然可以下载您的应用.这样做将意味着您可以跳过运行时权限代码.但是,请记住,您可能仍未获得许可.默认情况下,运行targetSdkVersion 22应用程序的Android 6.0设备的用户将授予CAMERA权限.但是,这些用户仍然可以进入设置>应用,找到您的应用,然后撤消权限.使用相机API,您基本上无法打开相机.

从策略上讲,targetSdkVersion为22或更低肯定是可能的.但是,最终,有些事情会“迫使您动手”,并要求您将其TargetSdkVersion设置为23或更高.因此,有一天,您将需要处理运行时权限.无论是今天还是将来的一天,都由您决定.

标签:android,android-permissions,android-camera,runtime-permissions,target-sdk
来源: https://codeday.me/bug/20191012/1898507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有