Android 从摄影机意图结果获取路径和文件名
我想制作一张具有相机意图的图片,并将其保存到默认的DCIM文件夹中。然后我想得到图片存储的路径/文件名 我正在使用以下代码进行尝试:Android 从摄影机意图结果获取路径和文件名,android,camera,android-intent,uri,image,Android,Camera,Android Intent,Uri,Image,我想制作一张具有相机意图的图片,并将其保存到默认的DCIM文件夹中。然后我想得到图片存储的路径/文件名 我正在使用以下代码进行尝试: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_PICTURE); 使用此代码,相机将打开,在我拍摄完一张照片后,相机将关闭并将照片保存到默认的图像文件夹(通常为/dcim/camera或sdcard/dcim/cam
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
使用此代码,相机将打开,在我拍摄完一张照片后,相机将关闭并将照片保存到默认的图像文件夹(通常为/dcim/camera或sdcard/dcim/camera…)
但是我现在如何才能获得拍摄照片的路径和文件名呢?
我已经尝试了几乎所有的onActivityResult
我试过了
及
及
及
等等
我在过去的两天里研究了这个问题的解决方案,网上和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);
它不将图像存储为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);
当我尝试这样做时,它会将图像存储到正确的文件夹中,并使用给定的名称(例如test111111.jpg)。
但是现在如何在onActivityResult中获取文件路径?当您启动
操作\u图像\u捕获
时,您可以传递一个额外的文件作为要保存图片的文件的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);
编辑:我刚刚在我的设备上尝试过,并且
file.createNewFile()
为我解决了这个问题。图片将存储两次,首先存储在gallery文件夹中,然后存储在您指定的文件中,使用putExtra(MediaStore.EXTRA\u输出,路径)方法
您可以通过以下操作获取最后拍摄的照片:
/**
* 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;
}
}
此示例基于post:您可以在onActivityResult()中这样使用
您好,谢谢您的快速回复,但它没有按预期工作。我会在上面解释。一个愚蠢的问题也许。。。您是否已在清单中添加权限?安卓,许可,摄像头?是的,它有时可以不经许可就工作是的,我添加了许可。我只需要知道相机保存的图片的路径。我知道路径是默认的图片文件夹,所以实际上我只需要文件名或最新拍摄图片的路径。我在找两天的解决办法。你们都知道路。。。因为你创建了你的文件。您可以将文件或路径保留为活动的成员变量嘿,此代码适用于samsung tab,但不适用于lenovo和i-ball tab,是否有其他解决方案?????
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);
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);
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);
/**
* 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;
}
}
if(requestCode==CAMERA_CAPTURE)
{
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToFirst())
{
do
{
String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
Uri selectedImage = Uri.parse(picturePath);
}
while(cursor.moveToNext());
cursor.close();
File out = new File(picturePath);
try
{
mOriginal = decodeFile(out);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mSelected.setImageBitmap(mOriginal);
}
}