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

回到顶部