写在前面的话
最近学习 Android 开发学到了运行时权限这部分,为了更好的理解与熟悉运行时权限的申请方法,我查找了一些资料做了如下总结。为了方便后期查看,同时也分享出来供大家一起学习。
文章中若有描述不严谨或错误的地方,还请指出。
方法一:一般写法
这个方法中的内容主要参考的是 郭霖 大神的作品《第一行代码(第三版)》。
自 Android 6.0 系统后,Android 引入了运行时权限功能以加强对用户安全与隐私的保护。
申请运行时权限的一般写法如下。
- 通过
ContextCompat.checkSelfPermission()
方法判断是否已有用户授权,该方法需要接受两个参数:第一个参数是一般为上下文Context;第二个参数是需要申请的权限名。 ContextCompat.checkSelfPermission()
方法会返回PERMISSION_GRANTED
或PERMISSION_DENIED
,分别代表有授权和无授权。如果有授权,那么直接执行操作逻辑即可;若无授权,则需要调用ActivityCompat.requestPermissions
方法申请授权,这个方法需要接受三个参数:第一个参数是 Activity 实例;第二个参数是一个用来存放待申请的权限名称的 String 数组,第三个参数是请求码,请求码需要是唯一值。- 在调用了
requestPermissions
方法后系统会弹出权限申请对话框,如论用户如何选择,最终都要回调到onResultPermissionsResult
方法中,而授权结果则会封装在grantResults
参数当中。 - 于是我们需要判断最后的授权结果,如果用户同意,就可以执行操作逻辑了;若用户拒绝授权的话,那么就只能放弃操作,并弹出相应的提示。
示例代码如下:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.makeCall.setOnClickListener {
//判断是否已有用户授权<