android 申请相机权限没有弹出授权对话框怎么办?
android api level 29的设备上首次安装申请相机权限,没有弹出授权的对话框怎么办?
已经在清单文件中声明相机权限
<uses-permission android:name="android.permission.CAMERA"/>
并且声明了与相机应用的交互规则:
<queries> <intent>
<action android:name="android.media.action.IMAGE_CAPTURE"/>
</intent>
<intent>
<action android:name="android.media.action.VIDEO_CAPTURE"/>
</intent>
</queries>
然后在需要使用相机的地方也动态申请了相机授权,但是死活不弹出相机授权对话框(应用首次安装或者卸载重装都如此)。
public class TestActivity extends AppCompatActivity { private ActivityResultLauncher<Intent> faceActivityResultLauncher;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ... 省略代码
this.faceActivityResultLauncher = this.registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() != Activity.RESULT_OK) {
UiCommon.toast(this, "相机拍摄失败");
return ;
}
this.updateFace(this.face);
}
);
// 申请授权
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.CAMERA}, TEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean isGranted = PermissionCommon.permissionResultHandle(this, requestCode, permissions, grantResults);
switch (requestCode) {
case TEST_CODE:
if (!isGranted) {
// 省略部分代码 ...
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
this.faceActivityResultLauncher.launch(intent);
}
break;
default:
break;
}
}
}
这是为什么?该如何解决上述问题?
回答:
问题已解决,是连续申请权限导致的。上述代码没贴完整,问题如下:
public boolean checkPermissions() { PermissionCommon.requestStoragePermissions(this.activity);
PermissionCommon.requestCameraPermissions(this.activity);
if (!PermissionCommon.isHasStoragePermission(this.activity)) {
UiCommon.toast(this.activity, "无文件存取权限");
return false;
}
if (!PermissionCommon.isHasCameraPermission(this.activity)) {
UiCommon.toast(this.activity, "无相机权限");
return false;
}
return true;
}
将权限合成一下一次性申请就可以了。
public boolean checkPermissions() { // 将存储和拍照权限合在一起申请
String[] permissions = new string[] {...};
PermissionCommon.requestPermissions(this.activity, permissions);
if (!PermissionCommon.isHasPermissions(this.activity, permissions)) {
UiCommon.toast(this.activity, "部分或全部权限未授予");
return false;
}
return true;
}
以上是 android 申请相机权限没有弹出授权对话框怎么办? 的全部内容, 来源链接: utcz.com/p/945463.html