我试图拍照,然后将其保存并上传到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);
它在最后一行显示错误,下面的代码不包括在内,因为它不相关。
答案 0 :(得分:1)
您为内部存储提供了文件路径,因此尝试提供外部存储路径,它将正常工作。
像这样改变你的getOutputMediaFile,
private File getOutputMediaFile(String newUUID){
if (newUUID == null) {
newUUID = UUID.randomUUID().toString();
User.pictureTakenName = newUUID;
}
return new File(Environment.getExternalStorageDirectory(), newUUID);
}
并尝试从这条道路上回来。