从Android 6.0开始,在运行时请求权限,而不是在安装之前请求权限。
Android official doc推荐了以下代码:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
...
}
}
我对以上示例代码中的一件事感到困惑,这就是为什么上面的评论说" 向用户显示解释异步 & #34 ;?这是一个遵循的惯例吗?我的意思是,如果我只是打算弹出一个对话框来解释为什么需要权限,我不会看到需要异步弹出对话框。我只是不明白为什么google会推荐异步代码。
它是否表明谷歌不希望开发者弹出对话框,但做了一些重大动作?嗯...无论如何,对此非常困惑。
答案 0 :(得分:5)
遵循惯例吗?
这是所有Android应用开发中的标准概念,尤其是在处理UI时。它也非常需要,因为Android中没有适用于同步UI的API。
我的意思是,如果我打算弹出一个对话框来解释为什么需要权限,我不认为需要异步弹出对话框。
您在Android中弹出的每个对话框都是异步弹出的。当您致电show()
时,对话框在show()
返回时不会显示。它是计划出现,它会在您将控制权返回给主应用程序线程后的某个时间出现。这就是谷歌在这里所说的“异步”。
同步用户界面,如果调用show()
显示对话框阻止进一步执行代码,直到对话框消失,这样你就知道了什么用户在show()
后面的下一个语句中使用该对话框。