我有一个用户不能在我的Android应用程序中使用摄像头,尽管她似乎拥有所有正确的权限。
她使用的是GooglePixel6Pro,Android12Build/SD1A.210817.037。
她已经删除并重新安装了该应用程序。她已经删除了与应用程序相关的存储和缓存。她可以在其他应用程序中使用相机。她正在使用默认的相机应用程序。
没有其他人抱怨过这个问题,但她正在使用最近的构建更新,所以也许她只是第一个看到并告诉我。
弹出错误消息显示:
不能保存照片。相机没有权限保存到这个位置。
在她的设置应用程序中,对于app权限:
在“设置”应用程序中,对于所有权限,:
应用程序权限:
该应用程序使用一个webview并从标准的HTML表单中启动相机。这是标准的,并自动给用户选择使用相机或文件。然后图像通常通过表单发送到我的服务器并保存在那里。
如果用户选择文件,则可以上传图像,但如果选择相机选项,则不能上传图像。我不确定在和她的相机拍照之前还是之后会弹出错误信息。
应用程序代码:
private int MY_PERMISSIONS_REQUEST_CAMERA = 1;
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
uriArrayCallback = filePathCallback;
if ( (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
)) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA,
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CAMERA);
} else {
// has permissions
openFileChooserInternal(NEW_FILECHOOSER_REQUEST_CODE);
}
return true;
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_CAMERA) {
boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean readExternalAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean writeExternalAccepted = grantResults[2] == PackageManager.PERMISSION_GRANTED;
if (cameraAccepted && readExternalAccepted && writeExternalAccepted) {
openFileChooserInternal(NEW_FILECHOOSER_REQUEST_CODE);
} else {
}
}
}发布于 2022-05-25 06:23:16
我遇到了同样的问题,我在我的意图中使用了MediaStorage作为额外的。下面是一个示例:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, imageFileName);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
Uri uri = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);https://stackoverflow.com/questions/70326147
复制相似问题