我想让相机照片真实路径,而不拍照。
我现在使用的是:
String path=""; //The real path I want...
String[] projection=new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN};
final Cursor c=context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN+" DESC");
if(c!=null)
{
c.moveToFirst();
path=c.getString(1);
Log.i(Constants.TAG, "File Path: "+path);
path=path.substring(0, path.lastIndexOf('/')+1);
}
但上面的结果有时候改变了......
对于正常情况,它将是 / storage / ext_sd / DCIM / 100MEDIA /
(我正在使用HTC Butterfly,android 4.1.1,与United Stats中名为DroidDNA完全相同的模块)
今天下午,我将一些照片移到另一个文件夹(在手机上操作,而不是PC)
结果更改为 / storage / ext_sd / [some_other_of_my_image_folder] /
如何获取相机照片的真实路径?请帮帮我: - (
编辑:我正在尝试另外一种方式:
Log.i(Constants.TAG, "Photo path: "+f.getPath());
if(f.exists())
{
File test1=new File(f, "100MEDIA/");
if (test1.exists())
{f=test1;}
else
{
File test2=new File(f, "100ANDRO/");
if(test2.exists())
{f=test2;}
else
{
File test3=new File(f, "Camera/");
if(!test3.exists())
{test3.mkdirs();}
f=test3;
}
}
}
else
{
f=new File(f, "Camera/");
f.mkdirs();
}
它返回的路径如下: / storage / sdcard0 / DCIM / 100MEDIA / ,这是我手机的内部16GB空间。
我已将相机照片存储设置为外部microSD,该路径应为 / ext_sd / DCIM / 100MEDIA /
真的需要帮助,MEDIC!
答案 0 :(得分:3)
2人投票支持我的问题,所以我想也许其他程序员也面临同样的问题。
我有办法克服这个问题,以下是我的代码:
String path="";
String[] projection=new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN};
final Cursor c=context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN+" DESC");
boolean isOK=false; //Found a DCIM path ?
if(c!=null)
{
c.moveToFirst();
while(!isOK)
{
path=c.getString(1);
Log.i(Constants.TAG, "File Path: "+path);
path=path.substring(0, path.lastIndexOf('/')+1);
isOK=!(path.indexOf("DCIM")==-1); //Is thie photo from DCIM folder ?
c.moveToNext(); //Add this so we don't get an infinite loop if the first image from
//the cursor is not from DCIM
}
}
Log.i(Constants.TAG, "Only Path: "+path);
快递:
首先,这是我的SD卡
我总是从 context.getContentResolver()。query 的光标中读取第一条记录。
通常情况下,它首先在DCIM内部返回照片,然后返回其他照片/图像/图片。
有一天早上,我将一个文件从DCIM移动到另一个文件夹,(通过android的Gallery APP)
和 context.getContentResolver()。查询的第一条记录已更改为其他非DCIM内容,
把这个问题带给我...... orz
这不是完美的解决方案,如果用户没有将任何照片带到DCIM,这个解决方案将变得毫无用处。
由于我正在开发多媒体APP,猜猜用户应该/必须是照片爱好者...... 这是迄今为止我能做的最好的方式,希望它给别人带来一些帮助。