bih*_*der 17 camera android uri image android-intent
我想用相机意图制作一张照片并将其保存到默认的DCIM文件夹中.然后我想获得存储图片的路径/文件名.
我正在尝试使用以下代码:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
Run Code Online (Sandbox Code Playgroud)
使用此代码,相机打开,在拍完一张照片后关闭并将照片保存到默认图像文件夹(通常是/ dcim/camera或sdcard/dcim/camera ......)
但是我怎样才能获得拍摄照片的路径和文件名?我已经试过几乎所有在onActivityResult
我试过
String result = data.getData();
Run Code Online (Sandbox Code Playgroud)
和
String result = data.getDataString();
Run Code Online (Sandbox Code Playgroud)
和
String result = data.toURI();
Run Code Online (Sandbox Code Playgroud)
和
Uri uri = data.getData();
Run Code Online (Sandbox Code Playgroud)
等等
我研究了最近两天为此找到解决方案,网上有很多文章和stackoverflow,但没有任何作用.我不想要缩略图,我只想要路径(uri?)到相机拍摄的图像.
感谢您的任何帮助
编辑:当我尝试:
path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
Run Code Online (Sandbox Code Playgroud)
它不会将图像存储为test.jpg但是使用正常的图像名称2011-10-03 ..... jpg(但也没关系,我只需要图像的路径,这个名字无关紧要是).
最好的祝福
再次编辑
path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,它将图像存储到正确的文件夹并使用给定的名称(例如test111111.jpg).但是如何在onActivityResult中获取文件路径?
图片将存储两次,首先存储在gallery文件夹中,然后存储在您在putExtra(MediaStore.EXTRA_OUTPUT,path)方法上指定的文件之后.
您可以获取拍摄的最后一张照片:
/**
* Gets the last image id from the media store
* @return
*/
private int getLastImageId(){
final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
if(imageCursor.moveToFirst()){
int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
Log.d(TAG, "getLastImageId::id " + id);
Log.d(TAG, "getLastImageId::path " + fullPath);
imageCursor.close();
return id;
}else{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
此示例基于帖子:在拍摄相机意图照片后删除图库图像
当您启动时,ACTION_IMAGE_CAPTURE
您可以传递额外的内容MediaStore.EXTRA_OUTPUT
作为URI
要保存图片的文件。
这是一个简单的例子:
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚在我的设备上尝试并file.createNewFile()
为我解决了问题。
归档时间: |
|
查看次数: |
26096 次 |
最近记录: |