我是Android开发的新手,我正在尝试从图库中选择图像exif数据。我可以打开图库并选择图像。但正如我在网上看到的那样,我需要获得我无法获得的图像路径
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
返回0。
这是我的代码
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getRealPathFromURI(this,selectedImageUri);
}
}
}
我获得真正路径的功能就是这个
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
String result = null;
CursorLoader cursorLoader = new CursorLoader(
context,
contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
if(cursor != null){
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
}
return result;
}
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "*****"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner ""
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
我错过了什么吗?
答案 0 :(得分:1)
但是当我在网上看到我需要获得图像路径
无论你走到哪里"在线"是不正确的。对于初学者来说,没有"图像路径"。
我获得真正路径的功能就是这个
该代码从来就不是一个好的解决方案,从未运行良好,并且会因许多Uri
值而失败。
我正在尝试从图库中选择图像exif数据
步骤1:将support-exifinterface
库添加到项目中
第2步:致电getContentResolver().openInputStream(selectedImageUri)
,获取InputStream
Uri
第3步:将InputStream
传递给the android.support.media.ExifInterface
constructor
第4步:使用ExifInterface
来获取您的EXIF标题
答案 1 :(得分:0)
试试这个:
public static String getRealPathFromURI_API19(Context context, Uri uri){
String filePath = "";
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
@SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
String result = null;
CursorLoader cursorLoader = new CursorLoader(
context,
contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
if(cursor != null){
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
}
return result;
}
public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index
= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}