【问题标题】:Taking camera picture works on emulator but not on real device拍摄相机照片在模拟器上有效,但在真实设备上无效
【发布时间】:2017-07-16 18:47:08
【问题描述】:

我正在尝试拍照,然后将其保存并上传到 Firebase,但由于某种原因,当我在任何模拟器上尝试此操作时,它可以工作,但在我的真实手机上,我收到文件不存在的消息。 注意:用户已经授予相机和存储权限。 User.pictureTaken 和 User.pictureTakenName 只是另一个类中的 2 个静态字符串,我用它们来快速保存路径和 UUID。

拍照:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

File file = getOutputMediaFile(null);
Uri photoUri = FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".provider", file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
User.pictureTaken = file.getPath();
Log.d("MyTag", "URL: " + file.getPath());

startActivityForResult(intent, TAKE_PHOTO_CODE);

获取图片路径:

private File getOutputMediaFile(String newUUID){
    if (newUUID == null) {
        newUUID = UUID.randomUUID().toString();
        User.pictureTakenName = newUUID;
    }

    return new File(getActivity().getFilesDir(), newUUID);
}

尝试打开文件:

File mediaStorageDir = getOutputMediaFile(User.pictureTakenName);
InputStream stream = new FileInputStream(mediaStorageDir);
UploadTask uploadTask =  FirebaseReferences.selfies.child(User.pictureTakenName).putStream(stream);

这里的最后一行给出了错误,下面的代码不包括在内,因为它不相关。

【问题讨论】:

    标签: android file android-camera uri android-camera-intent


    【解决方案1】:

    你给了内部存储的文件路径,所以尝试给外部存储路径,它可以正常工作。

    像这样改变你的getOutputMediaFile,

    private File getOutputMediaFile(String newUUID){
        if (newUUID == null) {
            newUUID = UUID.randomUUID().toString();
            User.pictureTakenName = newUUID;
        }
    
        return new File(Environment.getExternalStorageDirectory(), newUUID);
    }
    

    并尝试从这条路回来。

    【讨论】:

    • 好的,我目前不在家,但我会试试这个并回复你。已经谢谢了!
    • 谢谢!这行得通。你能解释一下为什么它不适用于内部存储还是因为手机没有root?
    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多