【问题标题】:android get photo path without take photoandroid获取照片路径而不拍照
【发布时间】:2013-01-20 02:48:31
【问题描述】:

我想得到相机照片的真实路径,而不是拍照。

我现在使用的是:

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!

【问题讨论】:

    标签: android path camera photo


    【解决方案1】:

    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 卡

    • /DCIM/100MEDIA/xxx.JPG(相机照片)
    • /Media/image/comics/xman/01.JPG
    • ...
    • ..
    • .
    • /Media/image/hot/youknowwhatitis/hot01.JPG

    我总是从 context.getContentResolver().query 的光标中读取第一条记录。

    通常,它会先返回 DCIM 内部的照片,然后再返回其他照片/图像/图片。

    一天早上,我将一个文件从 DCIM 移动到另一个文件夹,(通过 android 的 Gallery APP)

    context.getContentResolver().query的第一条记录改为其他非DCIM内容,

    把这个问题交给我...orz


    这不是完美的解决方案,如果用户没有拍摄任何照片到 DCIM,这个解决方案将变得毫无用处。

    由于我正在开发一个多媒体应用程序,猜测用户应该/必须是一个照片爱好者...... 这是目前为止我能做的最好的方法,希望对他人能有所帮助。

    【讨论】:

    • 优秀的解决方案...很惊讶这还没有传播更多。
    • 但是,有一个小错误...您忘记添加 c.movetoNext()。否则,如果光标返回的第一张图片不是来自DCIM,则会导致死循环。
    • 如果我想加载其他应用程序的照片,我该怎么做?
    • 你能告诉我如何在android中获取相机拍摄的照片的默认目录吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多