因此,全新的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; }
许可请求的处理方式如下:
@OverrIDepublic 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运行时权限感到困惑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)