需求 微信分享图片:
消息参数?thumbData?传入图片转成二进制
代码简单可以参考:Android图片分享问题采坑总结_android 微信分享图片-CSDN博客
thumbData 如果发到微信的图不清晰,图片尺寸设置的不要太小,可以质量压缩的低点
例如使用Glide来压缩
val options = RequestOptions() .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .encodeFormat(Bitmap.CompressFormat.JPEG) .encodeQuality(50) Glide.with(context) .asBitmap() .load(url).apply( options ) .fitCenter() .override(width, height) .into(target)
然后微信的api再做一次压缩
Bitmap bitmap = shareBean.shareBitmap; WXImageObject imgObj = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; msg.setThumbImage(bitmap); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg;
当然这些只是缩略图配置而已。如果要求能传大图。
那么需要用到?imageObject.setImagePath(——); 来处理25M以内的图片
Bitmap bitmap = shareBean.shareBitmap; WXImageObject imageObject = new WXImageObject(); imageObject.setImagePath(str); WXMediaMessage msg = new WXMediaMessage(imageObject); // 设置缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 135, 240, true); bitmap.recycle(); msg.thumbData = ImageUtils.compressBitmap(activity, thumbBmp, 100, true); //构建一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg;
str 是 文件路径 要配置 微信要求的file的格式? shareData? 并且Uri 带上?fileprovider?
要与`AndroidManifest.xml`里配置的`authorities`一致
获得str的实例代码:
public static String getFileUri(Context context, File file) { if (file == null || !file.exists()) { return null; } Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file); // 授权给微信访问路径 context.grantUriPermission("com.tencent.mm", // 这里填微信包名 contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); return contentUri.toString(); }
public static void getShareDataFilePath(@NonNull final Context context, @NonNull final Bitmap bitmap, WxCallBack callback) { TaskManager.Companion.ioTask(continuation -> { BufferedOutputStream outputStream = null; try { String fileName = "img_" + System.currentTimeMillis() + ".jpg"; final File screenshotsDir = new File(context.getExternalFilesDir(null), "shareData"); if (!screenshotsDir.exists()) { //如果该文件夹不存在,则进行创建 screenshotsDir.mkdirs();//创建文件夹 }else { for (File file : screenshotsDir.listFiles()) { if (file.isFile()){ file.delete(); // 删除所有文件 } } } File screenshotFile = new File(screenshotsDir, fileName); outputStream = new BufferedOutputStream(new FileOutputStream(screenshotFile)); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); outputStream.flush(); callback.onResult(getFileUri(context,screenshotFile)); } catch (final IOException e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (final IOException ignored) { ignored.printStackTrace(); } } } return null; }); }
ImageUtils.compressBitmap 构建缩略图 是bitmap转成字节而已,网上很多例子,转换的时候进行压缩
注意:
imageObject.setImagePath(str);这个方法只能在Android11以后使用,所以Android11之前还是只能用缩略图传图片