拍照相机可在仿真器上运行,但不适用于真实设备

时间:2017-07-16 18:47:08

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

我试图拍照,然后将其保存并上传到Firebase但由于某种原因,当我在任何模拟器上尝试此功能时,它可以正常工作,但在我的真实手机上,我收到的消息是文件没有'存在。 注意:用户已经获得了相机和存储的许可。 User.pictureTaken AND 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);

获取imagepath:

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);

它在最后一行显示错误,下面的代码不包括在内,因为它不相关。

1 个答案:

答案 0 :(得分:1)

您为内部存储提供了文件路径,因此尝试提供外部存储路径,它将正常工作。

像这样改变你的getOutputMediaFile,

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

    return new File(Environment.getExternalStorageDirectory(), newUUID);
}

并尝试从这条道路上回来。