【发布时间】:2018-02-07 20:06:26
【问题描述】:
此程序需要访问相机和位置。但是,当设备需要同时请求两者时,它只请求其中一个权限,并且在我关闭我的程序然后重新打开它之前不会请求另一个。我无法弄清楚这个问题。
protected void requestBoth() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA}, MULT_KEY);
}
protected void requestLoc() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCPERMISSION_KEY);
}
protected void requestCam() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMPERMISSION_KEY);
}
public void request() {
if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) {
requestUpdates();
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
requestCam();
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
requestLoc();
} else {
requestBoth();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 23) {
request();
}
}
请有人帮忙!顺便说一句,我故意在这个问题中省略了 shouldShowRequestPermissionsRationale 以及 onRequestPermissionsResult 方法,因为我认为这些与问题无关。 (我什至尝试将 request() 调用放在 onResume() 中,但是当权限被拒绝并且用户选中“不再显示”时,这会导致无限循环。我完全没有想法。
【问题讨论】:
-
找不到此代码的任何问题,您可能需要在其他部分查找问题。您是否从片段的活动中调用它?如果是后者,那么您可能对 FragmentManager 有问题
-
请显示用户处理权限请求后执行的回调代码。
标签: android android-studio permissions