Android 尝试拍照时,获取无法找到包含/storage/simulated/0/Pictures/NoteTaking/IMG_20170226_231007.jpg的配置根目录
我正在尝试制作一个应用程序,用模拟器而不是设备拍摄照片并显示。我遵循以下步骤: 第1部分)这是我的代码,它的作用是:Android 尝试拍照时,获取无法找到包含/storage/simulated/0/Pictures/NoteTaking/IMG_20170226_231007.jpg的配置根目录,android,android-camera,Android,Android Camera,我正在尝试制作一个应用程序,用模拟器而不是设备拍摄照片并显示。我遵循以下步骤: 第1部分)这是我的代码,它的作用是:file=FileProvider.getUriForFile(这是“edu.android.notetakingapplication.provider”,createFileDir()) 这部分在Mainxml中 if (!mediaStorageDir.exists()){ if (!mediaStorageDir.mkdirs()){
file=FileProvider.getUriForFile(这是“edu.android.notetakingapplication.provider”,createFileDir())代码>
这部分在Mainxml中
if (!mediaStorageDir.exists()){
if (!mediaStorageDir.mkdirs()){
Log.d("NoteTaking", "failed to create directory");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
return new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
}
这是我的应用程序清单文件的提供程序部分
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="edu.android.notetakingapplication.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
试试这个肯定会有用的:
Uri mImageCaptureUri;
private void operCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
"tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && mImageCaptureUri != null && resultCode != 0) {
if (mImageCaptureUri != null) {
String path1 = mImageCaptureUri.getPath();
if (path1 != null) {
File file1 = new File(path1);
Uri capturedUri = Uri.fromFile(file1);//here you get the URI
//you can easily get the path from URI if you need
}
}
}
}
无法解码流:java.io.FileNotFoundException:/external\u files/Pictures/notecaking/IMG\u 20170226\u 230608.jpg(没有这样的文件或目录)
。当然,您会得到该错误,因为它是文件对象或文件流的无效路径。您以错误的方式将uri保存到数据库中。您最好保存文件:getAbsoluthePath(),而不是Uri:getPath()。您是否在清单文件中添加了权限:读取外部存储/写入外部存储是的,我提供了写入外部存储权限。您是否也可以添加此权限读取外部存储。但这和写作有关系吗。写入权限隐式地允许读取,因此如果需要写入外部存储器,则只需请求一个权限。仍然是一样的。返回新文件(mediaStorageDir.getAbsolutePath()+File.separator+“IMG_”+timeStamp+”.jpg)代码>我在createFileDir()中更改了它。但我还是犯了同样的错误。我删除了旧数据库并向新数据库添加了新路径。您没有显示产生错误的代码。。那我们该怎么帮助呢?如果你的路径仍然以“/external_files/P…”开头,那么你就知道你做错了什么。显示执行此操作的代码。并准确说出存储的内容。我认为你的“路径”已经错了,很抱歉。我添加了更多的部分。如果你不懂任何部分,请告诉我。在将值添加到数据库之前,我对文件.getAbsolutePath()执行了Log.v操作。它给了我这条路<代码>/external\u files/Pictures/NoteTaking/******
我添加了从数据库检索值并尝试使用路径设置图像视图的部分。这是第二部分。我实际上可以得到一条路径,但是得到了这个错误<代码>由以下原因引起:android.os.FileUriExposedException:file:///storage/emulated/0/tmp_avatar_1488215372729.jpg 通过ClipData.Item.getUri()暴露在应用程序之外获得它。。。我必须减少目标api和bam。能够单击、存储和查看照片。。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
Unable to decode stream: java.io.FileNotFoundException: /external_files/Pictures/NoteTaking/IMG_20170226_230608.jpg (No such file or directory)
Uri mImageCaptureUri;
private void operCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
"tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && mImageCaptureUri != null && resultCode != 0) {
if (mImageCaptureUri != null) {
String path1 = mImageCaptureUri.getPath();
if (path1 != null) {
File file1 = new File(path1);
Uri capturedUri = Uri.fromFile(file1);//here you get the URI
//you can easily get the path from URI if you need
}
}
}
}