targetSdkVersion 23以下6.0中调用requestPermissions()的问题

targetSdkVersion 23以下6.0中调用requestPermissions()的问题

targetSdkVersion如果是23以下,调用ActivityCompat.requestPermissions(),会弹出权限选择对话框,但是选择拒绝授权,onRequestPermissionsResult中的返回值却是PERMISSION_GRANTED,但选择同意授权,会把应用关闭重新开启当前activity,而不会调用onRequestPermissionsResult中的方法,所以不要在targetSdkVersion设置为23以下,又把complierSdkversion设置为23,这样会出现上述的问题。最好的方式是把targetSdkVersion也设置为23,就可以解决。一切完美运行。

下面是一些对应的解答:


The following are the Marshmallow permissions features every developer should keep in mind.

  1. As you may already know, all permissions are divided into two categories: normal and dangerous. Android 5.1 and older versions display dangerous permissions during installation. If a user denies them an application will not be installed at all. Starting from Android 6.0 dangerous permissions are divided into subcategories (see below), that should be separately confirmed by a user while using an app. You should remember though that if one permission from a group has been accepted, you will not be asked for additional confirmation of further ones that belong to it too.

image

  1. If you specify targetSdkVersion = 22 and lower in the build.gradle file while building-up an app, you will see a usual permission confirmation dialog during its installation from the Play Store to a device running Marshmallow. All permission groups will be turned on in settings after installation. If you try to turn off the app access to one of the needed permissions, the following dialog will be displayed:

image

  1. In case build.gradle targetSdkVersion = 23, you will need to add an access request to necessary permissions and user response processing. Let’s dig deeper into details here.

If you need access to the elements that require permissions, always check it with the help of the method:

ContextCompat.checkSelfPermission(activity,Manifest.permission.< verifiable_permission >

It is strongly recommended to use the ContextCompat class method  from the support-v4 library for verification, as Context.checkSelfPermission is available starting from Android 6.0 only and will cause crashes in the previous OS versions.

If this method returns the value PackageManager.PERMISSION_GRANTED, it means the permission has been confirmed and can be used now.

Otherwise, you need to request permission from a user. To do this, call the ActivityCompat.requestPermissions method and transfer the reference to Activity, the string array of necessary permissions and the request code as settings. If there have been no access requests to the needed permissions before, you will see a standard dialog that cannot be customized:

image

There is an onRequestPermissionsResult method added in Android 6.0 to process the call results. It works when a user pushes Deny or Allow buttons.

If a user presses Allow, access is confirmed and the app can go on running. No surprise about that. But what if not? In this case, further calls of ActivityCompat.requestPermissions will not display the dialog. Instead of this a developer is recommended to show a dialog with descriptions why the app needs the requested permissions. Use the ActivityCompat.shouldShowRequestPermissionRationale method and transfer the reference to Activity and permission there to check if the description is to be shown. If the method returns true, display the description and ask for access permission from a user again. This time the dialog will look different:

image

If a user presses Deny in this dialog and chooses Never ask again, all further calls of ActivityCompat.shouldShowRequestPermissionRationale will return false, and the ActivityCompat.requestPermissions call will not display the permission dialog. PERMISSION_DENIED will immediately return to onRequestPermissionResult instead.

There is a possibility to request a few permissions at a time, but official guidelines do not recommend to do that, except the case when a few permissions are required to appear on the same screen simultaneously.

As stated above, the ActivityCompat.requestPermissions method accepts the reference to Activity and the string array of necessary permissions as input parameters. You can indicate a few needed permissions in this string array and thus a user will see a separate dialog for each of them.

image

image

As a result, access parameters for each requested permission will be transferred to the onRequestPermissionsResult method.

This all is actually one more additional task to include into the general scope of application development activities but such individual permissions are more secure. Android gives its users the possibility to control and personalize the OS on their devices so don’t forget about that when creating apps for its Marshmallow and up versions.


转载于:https://my.oschina.net/u/990728/blog/550693

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109194.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java拦截器放行_java拦截器放行某些请求

    java拦截器放行_java拦截器放行某些请求在java开发中,拦截器使用是很普遍的,最常用的就是登陆拦截了,然后并不是所有的请求我们都需要拦截,比如index页面的请求我们是不拦截的.通常情况下我们有两种方式:先贴出来springboot使用拦截器的case:1.自定义拦截器,实现HandlerInterceptor,也可以采用继承的方式(HandlerInterceptorAdapter),内容不重要,看过程publicclassL…

  • ubuntu python安装pip_ubuntu离线安装pip

    ubuntu python安装pip_ubuntu离线安装pip说明pip是一个安装和管理Python包的工具。在Pip的帮助下,你可以安装独特版本的包。最重要的是,Pip可以通过一个“requirements”的工具来管理一个由包组成的列表和版本号。Pip很像easy_install,但是Pip有一些额外的特色。ubuntu安装pip#建议在操作前将源替换为163或阿里的源#1.更新系统包sudoapt-getupdatesud

    2022年10月27日
  • python贪吃蛇代码「建议收藏」

    python贪吃蛇代码「建议收藏」语言:python外置组建:pygamepython是一款十分简单的语言,功能也十分巨大它也能实现贪吃蛇。游戏过程:废话不多说我们来看代码:#0.imortxxxximportpygame#pygame游戏库,sys操控python运行的环境importpygame,sys,random#这个模块包含所有pygame所使用的常亮frompygame.localsimport*#1,定义颜色变量#0-2550黑色255白色red

  • 笔记本计算机运行程序,这几招让你的笔记本电脑运行速度变快 必学技巧「建议收藏」

    笔记本计算机运行程序,这几招让你的笔记本电脑运行速度变快 必学技巧「建议收藏」很多电脑用户一直都被电脑慢的问题困扰着,而电脑大神根本不把电脑慢当做电脑问题,因为让电脑变快的方法有很多,而且操作都巨简单。提高电脑速度的方法也能很多而且很容易操作,一切的难,只是来源于你没有学过而已,现在就跟着小编来学那些简单又使用的电脑技能吧。让电脑速度快10倍,大概会让人觉得很不可思议吧,而实际上,你羡慕的大神可能也只是因为学会了下面的12种提高电脑速度的方法:1、定期的,对电脑内的灰尘进行…

  • vue.js中集成ueditor?

    vue.js中集成ueditor?

    2021年10月11日
  • html从零开始——为网页加入樱花飘落效果[通俗易懂]

    html从零开始——为网页加入樱花飘落效果[通俗易懂]JavaScript代码: varstop,staticx; varimg=newImage(); img.src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUgAAAEwCAYAAADVZeifAAAACXBIWXMAAACYAAAAmAGiyIKYAAAHG2lUWHRYTUw6Y29tLmFkb2Jl…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号