首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android应用程序:无法保存照片。照相机没有权限保存到这个位置

Android应用程序:无法保存照片。照相机没有权限保存到这个位置
EN

Stack Overflow用户
提问于 2021-12-12 17:48:33
回答 1查看 1.5K关注 0票数 3

我有一个用户不能在我的Android应用程序中使用摄像头,尽管她似乎拥有所有正确的权限。

她使用的是GooglePixel6Pro,Android12Build/SD1A.210817.037

她已经删除并重新安装了该应用程序。她已经删除了与应用程序相关的存储和缓存。她可以在其他应用程序中使用相机。她正在使用默认的相机应用程序。

没有其他人抱怨过这个问题,但她正在使用最近的构建更新,所以也许她只是第一个看到并告诉我。

弹出错误消息显示:

不能保存照片。相机没有权限保存到这个位置。

在她的设置应用程序中,对于app权限:

  • Camera
  • Files和Media
  • “无拒绝权限”

在“设置”应用程序中,对于所有权限,:

  • 摄像机:拍摄图片和视频
  • 文件和媒体:阅读共享媒体的内容,修改或删除共享媒体的内容

应用程序权限:

该应用程序使用一个webview并从标准的HTML表单中启动相机。这是标准的,并自动给用户选择使用相机或文件。然后图像通常通过表单发送到我的服务器并保存在那里。

如果用户选择文件,则可以上传图像,但如果选择相机选项,则不能上传图像。我不确定在和她的相机拍照之前还是之后会弹出错误信息。

应用程序代码:

代码语言:javascript
复制
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 {
            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2022-05-25 06:23:16

我遇到了同样的问题,我在我的意图中使用了MediaStorage作为额外的。下面是一个示例:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70326147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档