【问题标题】:Store picture on sd directory problem将图片存储在sd目录问题
【发布时间】:2011-04-22 09:40:31
【问题描述】:

我正在使用以下代码使用原生相机拍照:

private File mImageFile;
private String mTempImagePath;
public static Uri imageUri;
public void imageFromCamera() {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        Log.d("fototemp", "No SDCARD");
    } else {
        mImageFile = new File(Environment.getExternalStorageDirectory()+File.separator+"testFolder", "Pic"+System.currentTimeMillis()+".jpg");
        imageUri = Uri.fromFile(mImageFile);

        DataClass dc = (DataClass) getApplicationContext();
        File tempFile = new File(Environment.getExternalStorageDirectory()+File.separator+"testFolder");
        Uri tempUri = Uri.fromFile(tempFile);
        dc.setString(DataClass.IMAGE_PATH, tempUri.toString());
        Log.d("fototemp", "ImagePath: " + tempUri.toString());


        mTempImagePath = mImageFile.getAbsolutePath();
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mImageFile));
        startActivityForResult(intent, 0);
    }
}

我在imageFromCamera()方法中打印出来的ImagePath是:4file:///file%3A/mnt/sdcard/testFolder

现在,当我尝试使用 managedQuery 访问这些照片时,我得到了一个不同的目录。 MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI.toString() 给出 content://media/external/images/thumbnails

这两条路径有什么区别?我怎样才能让 managedQuery 去 testFolder 地图寻找图片?

编辑: 我正在尝试连接:

Uri phoneUriII = Uri.parse(Environment.getExternalStorageDirectory()+File.separator+"testFolder");
imagecursor = managedQuery(phoneUriII, img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID + "");

但是这段代码崩溃了

【问题讨论】:

  • 你的意思是要从Url对象中获取真实的图片路径吗?喜欢this
  • 我希望将保存图片的文件夹转换为 Uri,这样我就可以将 i 传递给 managedQuery 方法。我认为
  • 你不能只使用从 MediaStore 获得的 Url 来检索二进制流吗?尝试在其上调用 getData() 或使用getContentResolver().openOutputStream(uri)
  • 我也试过这个( Uri temp = Uri.parse(data.toURI()); Log.d("fototemp", data.toURI());) 但它打印“Foto采取:#Intent;action=inline-data;end" 这也不是正确的路径。完全对这个话题感到困惑

标签: android android-camera


【解决方案1】:

抱歉,我不太明白你的问题。

只需将其作为 URI 路径发送即可。

Environment.getExternalStorageDirectory()+File.separator+"testFolder"

还有 检查您是否有写入 sd 卡的权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【讨论】:

  • 书写不是问题,因为我可以在图库中查看拍摄的照片。我正在尝试 Uri phoneUriII = Uri.parse(Environment.getExternalStorageDirectory()+File.separator+"testFolder"); imagecursor = managedQuery(phoneUriII, img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID + "");但这会崩溃
【解决方案2】:

我在几个项目中使用了这个功能,效果很好。

/**
 * Retrieves physical path to the image from content Uri
 * @param contentUri
 * @return
 */
private String getRealImagePathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 2018-04-29
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多