use*_*003 8 android android-camera android-permissions
我有一个用户无法在我的 Android 应用程序中使用相机,即使她似乎拥有所有正确的权限。
她使用的是Google Pixel 6 Pro,Android 12 Build/SD1A.210817.037。
她已删除并重新安装了该应用程序。她已删除与该应用程序关联的存储和缓存。她可以将相机用于其他应用程序。她正在使用默认的相机应用程序。
没有其他人抱怨这个问题,但她正在使用最近的构建更新,所以也许她只是第一个看到它并告诉我的人。
弹出的错误消息显示:
无法保存照片。相机无权保存到此位置。
在她的“设置”应用程序中,对于应用程序权限:
在她的“设置”应用程序中,对于所有权限,:
应用程序权限:
Run Code Online (Sandbox Code Playgroud)<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
该应用程序使用网络视图并从标准 HTML 表单启动相机。这是标准的,并自动让用户选择使用相机或文件。然后图像通常通过表单发送到我的服务器并保存在那里。
Run Code Online (Sandbox Code Playgroud)<form action="upload/" method="post" enctype="multipart/form-data" > <input type="file" accept="image/*" name="image"> <input type="submit"> </form>
如果用户选择文件,则可以上传图像,但如果选择相机选项,则不能上传图像。我不确定错误消息是在用相机拍照之前还是之后弹出的。
应用程序代码:
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 {
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我遇到了同样的问题,我使用 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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2883 次 |
最近记录: |