功能需求:点击分享时,将小程序分享到微信,并截取当前屏幕作为主图。
难点:微信微信小程序写的太垃圾了,标注不清晰。分享图片大小不能超过32K,需要压缩。
WXMiniProgramObject miniProgram = new WXMiniProgramObject();
miniProgram.webpageUrl="";// 兼容低版本的网页链接
miniProgram.userName="gh_12345678";//小程序ID
miniProgram.path="/pages/index/index";//小程序路径
WXMediaMessage mediaMessage = new WXMediaMessage(miniProgram);
mediaMessage.title = "";//小程序消息title
mediaMessage.description = ""; // 小程序消息desc
// Bitmap bitmap = BitmapFactory.decodeResource(BusinessDisplayActivity.this.getResources(),R.mipmap.ic_launcher);
Bitmap bitmap = capture(rc);
// Bitmap sendBitmap = Bitmap.createScaledBitmap(bitmap,50,50,true);
mediaMessage.thumbData = bmpToByteArray(bitmap);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = ""; // 小程序消息封面图片
req.scene = SendMessageToWX.Req.WXSceneSession;
req.message = mediaMessage;
Constants.wx_api.sendReq(req);
bitmap.recycle();
压缩
public static byte[] bmpToByteArray(Bitmap bitmap) {
if (bitmap == null) {
return null;
}
try {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] result = null;
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
while (output.toByteArray().length > 35*1024) {
Log.e("TAG_daxiao","=="+output.toByteArray().length);
output.reset(); //清空output
bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);
options /= 2;
}
result = output.toByteArray();
bitmap.recycle();
output.close();
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
注意:如果涉及到布局生成图片,需要使用Handler。如果不使用Handler延迟,当布局显示后,截图已经完成。