2018-11-02 15:07:01 442浏览
今天扣丁学堂Android培训老师给大家主要介绍一下关于Android微信分享大图遇到的问题的解决方法,记录了微信图片分享出错的坑,具有一定的参考价值,下面我们一起来看一下吧。首先要做一个微信图片分享的功能,但是对于大图会如下问题:
public void WXsharePic(String transaction, final boolean isSession, Bitmap bitmap) { //初始化WXImageObject和WXMediaMessage对象 WXImageObject imageObject = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObject; //设置缩略图 Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true); bitmap.recycle(); msg.thumbData = getBitmapByte(scaledBitmap); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = transaction + Long.toString(System.currentTimeMillis()); req.message = msg; //表示发送给朋友圈 WXSceneTimeline 表示发送给朋友 WXSceneSession req.scene = isSession ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; //调用api接口发送数据到微信 api.sendReq(req); }
查看微信的文档,发现如下信息:
public static byte[] bitmap2Bytes(Bitmap bitmap, int maxkb) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); int options = 100; while (output.toByteArray().length > maxkb&& options != 10) { output.reset(); //清空output bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中 options -= 10; } return output.toByteArray(); }
public void WXsharePic(String transaction, final boolean isSession, Bitmap bitmap, String path) { //初始化WXImageObject和WXMediaMessage对象 WXImageObject imageObject; if (!StringUtil.isBlank(path)) { imageObject = new WXImageObject(); imageObject.setImagePath(path); } else { imageObject = new WXImageObject(bitmap); } WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObject; //设置缩略图 Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true); bitmap.recycle(); msg.thumbData = getBitmapByte(scaledBitmap); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = transaction + Long.toString(System.currentTimeMillis()); req.message = msg; //表示发送给朋友圈 WXSceneTimeline 表示发送给朋友 WXSceneSession req.scene = isSession ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; //调用api接口发送数据到微信 api.sendReq(req); }
private void shareToMoment() { final Bitmap sharePicture = getBitmapByView(svShare); AndPermission.with(this) .permission(Permission.WRITE_EXTERNAL_STORAGE) .onGranted(new Action() { @Override public void onAction(List<String> permissions) { String path = saveImageToGallery(sharePicture); WXsharePic("he" + System.currentTimeMillis(), true, sharePicture, path); } }) .onDenied(new Action() { @Override public void onAction(@NonNull List<String> permissions) { Log.e("Activity", "权限申请失败"); } }) .start(); }
public String saveImageToGallery(Bitmap bmp) { // 首先保存图片 String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dearxy"; File appDir = new File(storePath); if (!appDir.exists()) { appDir.mkdir(); } String fileName = System.currentTimeMillis() + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); //通过io流的方式来压缩保存图片 bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } return storePath + "/" + fileName; }
以上就是关于扣丁学堂Android微信分享大图遇到的问题的解决方法全部内容,希望对大家的学习有所帮助,扣丁学堂IT职业在线学习教育平台为您提供完整的体系Android视频教程让你快速掌握Android从入门到精通开发实战技能。
【关注微信公众号获取更多学习资料】