Java 从gallery android 5.1中选择图像
我使用的是从手机中拾取图像的标准方式。。除了安卓5.0及以上版本外,我的代码在所有安卓系统上都能正常工作 我做了一些调试,问题似乎如下:Java 从gallery android 5.1中选择图像,java,android,android-5.0-lollipop,Java,Android,Android 5.0 Lollipop,我使用的是从手机中拾取图像的标准方式。。除了安卓5.0及以上版本外,我的代码在所有安卓系统上都能正常工作 我做了一些调试,问题似乎如下: public String getPath (Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
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为ImagePath返回null。。这就是问题所在。。除了5.0+,它在任何其他android上都不会返回null。。我如何才能让它工作?试试:
String imagePath = cursor.getString(cursor.getColumnIndex(projection[0]));
您应该使用
startActivityForResult
和onActivityResult
。
诀窍:
然后:
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();
}
}
希望你受到启发。也许你会感兴趣。该库支持API 24(Android 7),允许您从相机、多媒体资料、文件系统甚至远程图像(例如,从Google Photos或Google Drive)拍摄图像 用法如下:
RxPaparazzo.takeImage(activityOrFragment)
.usingCamera() // or .usingGallery()
.subscribe(response -> {
if (response.resultCode() != RESULT_OK) {
response.targetUI().showUserCanceled();
return;
}
response.targetUI().loadImage(response.data());
});
我也注意到了这一点。安卓5.0似乎打破了数据列。这将是一个很好的答案,这是一个真正的修复。。。。
RxPaparazzo.takeImage(activityOrFragment)
.usingCamera() // or .usingGallery()
.subscribe(response -> {
if (response.resultCode() != RESULT_OK) {
response.targetUI().showUserCanceled();
return;
}
response.targetUI().loadImage(response.data());
});