【发布时间】:2016-09-14 11:59:38
【问题描述】:
我正在使用图像选择器选择图像,然后将此图像上传到服务器。
我的代码在所有安卓设备上都能完美运行除了小米 手机。
For all device Uri returned is of type : content://media/external/images/media/523 For Mi devices Uri returned is of type:file:///storage/emulated/0/DCIM/Camera/IMG_20160912_160415.jpgCursor cursor = context.getContentResolver().query() 返回 如果 uri 的格式不是 content://*
,则为 null
private void pickImage() {
Intent photoPickerIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
if (selectedImageUri != null) {
selectedImagePath = Utils.getImagePath(selectedImageUri, DepositBankWireActivity.this);
Log.i("uplaod", "selectedImagePath" + selectedImagePath);
}
}
public static String getImagePath(Uri uri, Context context) {
Log.i("getImagePath",""+uri+" mime "+getMimeType(uri,context));
String[] projection = {MediaStore.MediaColumns.DATA,
MediaStore.Images.ImageColumns.ORIENTATION};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null,
null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
有没有一种标准的方法来实现图像选择器,它返回 来自 uri 的正确图像路径,例如 /storage/emulated/0/Pictures/Screenshots/test.png 用于上传。
【问题讨论】:
-
使用
getContentResolver().openInputStream(yourUri) -
小米手机在此类事件中总是会出现问题,并且在大多数情况下可用的解决方案非常少。
-
@pskink 如何从输入流中获取图像路径。请帮忙。谢谢
-
路径?你需要什么路径?
-
@pskink 我正在使用一个需要文件路径的库,例如 /storage/emulated/0/Pictures/Screenshots/test.png 。这个库压缩图像并在服务器上进行多部分图像上传。
标签: android uri android-gallery