Android API 23及更高版本要求在运行时确认“危险”权限。根据其他StackOverflow建议,我使用checkSelfPermissions()检查所需的权限,并在需要时调用requestPermissions()。效果很好,但是请求是异步处理的,即requestPermissions()立即返回。问题是我的应用在requestPermissions()之后运行得很愉快。稍后,权限确认对话框会出现,但是到那时,我的应用已尝试失败的API调用。
我认为我需要等到所有权限都授予后才能继续在我的应用中进行操作。我想我可以实现一些轮询集群来做到这一点,但这对我来说太粗糙了。 解决此问题的“最佳实践”是什么?文档中的各种最佳实践描述都无法解决此问题。
答案 0 :(得分:4)
将您的逻辑置于onCreate()
之外的自己的函数中。
private void doStuff() {
//whatever
}
如果授予了权限,则直接从onCreate()
调用该函数:
@Override
public void onCreate(Bundle savedInstanceState) {
//...
if (checkSelfPermissions(/*whatever*/) {
doStuff();
} else {
requestPermissions(/*whatever*/);
}
//nothing dependent on runtime permissions after this point
}
然后覆盖onRequestPermissionsResult()
:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == /*whatever you set in requestPermissions()*/) {
if (!grantResults.contains(PackageManager.PERMISSION_DENIED) {
//all permissions have been granted
doStuff(); //call your dependent logic
}
}
}