2018-11-02 15:07:01 464浏览
今天扣丁学堂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从入门到精通开发实战技能。
【关注微信公众号获取更多学习资料】