我正在使用标准的android pick images from gallery方式从手机中挑选图片。除了Android 5.0及更高版本之外,我的相同代码在所有Android上运行得非常好。
我做了一些调试,问题似乎如下:
public String getPath (Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
ImagePath= cursor.getString(column_index) ;
System.out.println("HERE" + ImagePath); // returns null
return cursor.getString(column_index);
}
我做的prinln返回null fOR ImagePath ..这里的问题是..除了5.0+之外,它不会在任何其他android上返回null ..我怎么能让它工作?
答案 0 :(得分:0)
尝试:
String imagePath = cursor.getString(cursor.getColumnIndex(projection[0]));
答案 1 :(得分:0)
您应该使用startActivityForResult
和onActivityResult
。
招数:
Intent pickPicIntent = new Intent();
// pickPicIntent.setDataAndType(
// MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
pickPicIntent.setType("image/*");
pickPicIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(pickPicIntent, CODE_PICK_PICTURE);
然后:
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
// civAvatar.setImageBitmap(photo);
FileOutputStream fos = null;
try {
// Store Bitmap into a File
fos = new FileOutputStream(AVATAR_FILE);
photo.compress(Bitmap.CompressFormat.PNG, 100, fos);
AVATAR_FILE_TMP.deleteOnExit();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
IoUtils.closeSilently(fos);
finish();
}
}
希望你受到启发。
答案 2 :(得分:0)
也许你可能对RxPaparazzo感兴趣。此库支持API 24(Android 7),允许您从相机,图库,文件系统甚至远程图像(例如,从Google照片或Google云端硬盘)获取图像
用法是这样的:
RxPaparazzo.takeImage(activityOrFragment)
.usingCamera() // or .usingGallery()
.subscribe(response -> {
if (response.resultCode() != RESULT_OK) {
response.targetUI().showUserCanceled();
return;
}
response.targetUI().loadImage(response.data());
});