我正在尝试从图库中选择图像,它在Android 7.1下面正常工作但是从android 7.1它不适合我。如何修复相同。 这是我试过的代码:
public void LaunchGalleryView() {
mFileUri = null;
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_CODE_GALLERY);
}
这是onActivityResult()中的代码:
case REQUEST_CODE_GALLERY:
if (data == null) {
return;
}
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
File file = new File(picturePath);
mFileUri = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", file);
performCrop();
break;
如何修复同样请帮助我。
这是错误日志:
12-28 05:13:30.085 13533-13533 /? E / AndroidRuntime:致命异常: 主要 过程:com.welldoc.platform.android.cyan,PID:13533 java.lang.RuntimeException:传递结果失败 ResultInfo {who = null,request = 1,result = -1,data = Intent { DAT =含量://com.google.android.apps.photos.contentprovider/0/1/mediakey:/本地%3Aefc38517-5fd9-4b57-AFBF-6329e508fb66 / ORIGINAL / NONE / 1646850308 flg = 0x1 clip = {text / uri-list U:内容://com.google.android.apps.photos.contentprovider/0/1/mediakey%3A%2Flocal%253Aefc38517-5fd9-4b57-afbf-6329e508fb66/ORIGINAL/NONE/1646850308} 活动 {com.welldoc.platform.android.cyan / com.welldoc.platform.android.ui.profile.ProfileDetailsEditActivity}: 显示java.lang.NullPointerException 在android.app.ActivityThread.deliverResults(ActivityThread.java:4324) 在android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) 在android.app.ActivityThread.-wrap19(未知来源:0) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1649) 在android.os.Handler.dispatchMessage(Handler.java:105) 在android.os.Looper.loop(Looper.java:164) 在android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 引起:java.lang.NullPointerException 在java.io.File。(File.java:282) 在com.welldoc.platform.android.ui.profile.ProfileDetailsEditActivity.onActivityResult(ProfileDetailsEditActivity.java:1059) 在android.app.Activity.dispatchActivityResult(Activity.java:7235) 在android.app.ActivityThread.deliverResults(ActivityThread.java:4320) 在android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) 在android.app.ActivityThread.-wrap19(未知来源:0) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1649) 在android.os.Handler.dispatchMessage(Handler.java:105) 在android.os.Looper.loop(Looper.java:164) 在android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
答案 0 :(得分:0)
1。 将图片路径与其他手机图片选择的路径进行比较,有时路径格式可能会有所不同,因此您可以获得null。
答案 1 :(得分:0)
method FileProvider.getUriForFile()
的第二个参数要求您创建自定义FileProvider
并在应用的清单中定义它:
authority String:应用程序清单中元素中定义的FileProvider的权限。
如果您只想获取文件Uri
,可以使用下一个代码:
Uri.fromFile(file);
答案 2 :(得分:0)
我正在尝试从图库中选择图像,它在android 7.1下面正常工作
仅针对您尝试的设备,针对您尝试过的方案。它将在许多其他设备和其他场景中失败:
ACTION_PICK
无需从Uri
MediaStore
MediaStore
无需为您提供路径MediaStore
无需为您提供可以阅读的路径,更不用说写入这是onActivityResult()中的代码:
您已有Uri
。您不需要FileProvider
。您无需查询MediaStore
。 selectedImage
是Uri
。因此,请将其与您首选的image cropping library一起使用,并让该库将其结果保存到您控制的某个文件中。
如果由于某种原因,您需要一开始就有一个文件:
getContentResolver()
获取ContentResolver
openInputStream()
上的ContentResolver
,传递selectedImage
,获取该内容的InputStream
FileOutputStream
(例如,在getCacheDir()
中)InputStream
复制到FileOutputStream
答案 3 :(得分:0)
startActivityForResult(intent,1);
gallery
它DocumentProvider
将此内容放入OnActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null) {
try {
uri = null;
uri = data.getData();
Bitmap bmp = null;
file_galleryimagepath = null;
bmp = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
File f = new File(getActivity().getCacheDir(), System.currentTimeMillis() + ".jpg");
if (f.exists())
f.delete();
f.createNewFile();
Bitmap bitmap = bmp;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();
file_galleryimagepath = f;
Bitmap map = BitmapFactory.decodeFile(file_galleryimagepath.toString());
iv_userImage.setImageBitmap(map);
}catch (Exception e){
Log.e("204","HFP>>>"+e+"<<catch");
}
}
}
}
file path
崩溃中获取DocumentProvider' its result becomes
时,您必须传递这样的意图。