【发布时间】:2020-11-30 05:08:38
【问题描述】:
我有一个在 1000 多台设备上运行的生产应用程序。其中一项功能是获取图像视图的位图并通过所有可共享的应用程序共享它。为此,我创建了位图并通过 Media Store 将其插入,然后获取 URI 并将其传递给 Share Intent。
private void createAndShareImage() {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
String shareMgText;
shareMgText = "Read this post";
shareIntent.putExtra(Intent.EXTRA_TEXT, shareMgText);
String url = MediaStore.Images.Media.insertImage(context.getContentResolver(), ImageUtil.getBitmapFromView(postImageView), "", "");
if (url != null && !url.isEmpty()) {
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(url));
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else
Toast.makeText(context, "Failed to create shareable image", Toast.LENGTH_LONG).show();
context.startActivity(Intent.createChooser(shareIntent, "Select the app"));
}
public static Bitmap getBitmapFromView(View v) {
Bitmap bitmap = null;
try {
if (v.getMeasuredHeight() < IntegerConstants.SCREEN_HEIGHT)
bitmap = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
else
bitmap = Bitmap.createBitmap(v.getWidth(), v.getWidth(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
return bitmap;
} catch (Exception e) {
Log.e("ImageUtil", e.getMessage());
}
return bitmap;
}
这段代码运行良好,我没有更改这段代码。但突然间,我开始遇到几台 Android 10 设备的崩溃。 Firebase crashlytic 日志说:
致命异常:java.lang.NullPointerException:url 在 com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:133) 在 android.content.ContentResolver.delete(ContentResolver.java:1951) 在 android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:1794) 在 com.xxxx.yyy.dialogs.SharePostDialog.createAndShareImage(SharePostDialog.java:121) 在 com.xxxx.yyy.dialogs.SharePostDialog.onClick(SharePostDialog.java:99)
这发生在 RedMi Note Android 10 设备中(至少在我的测试设备 Android 8 和 Android 11 中这是不可重现的)。我无法理解问题的任何可能原因。什么以及它如何变得 null ?以及如何解决?
【问题讨论】:
标签: android firebase mediastore