Android 分享小程序时遇到错误如下:
checkArgs fail, thumbData is invalid上网查阅文章查到如下结果:
原来微信对缩略图的大小进行了限制。超过32K 就会报参数错误!可是图片只有18K 并没超过32K,于是定位于图片处理部分出错
原代码:
private void shareWeapp(String id,String img,String title){ // Toast.makeText(mContext,id,Toast.LENGTH_SHORT).show(); String path = "*********"; WXMiniProgramObject miniProgram = new WXMiniProgramObject(); miniProgram.webpageUrl = "*****"; miniProgram.userName = "***********"; miniProgram.path = path; WXMediaMessage msg = new WXMediaMessage(miniProgram); msg.title = title; msg.description = title; Bitmap bmp = Util.returnBitMap(img); Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true); bmp.recycle(); msg.thumbData = Util.bmpToByteArray(thumbBmp, true); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneTimeline; api.sendReq(req); }其中的bmpToByteArray方法如下:
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(CompressFormat.PNG, 100, output); if (needRecycle) { bmp.recycle(); } byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; }将其改成
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {int i;int j;if (bmp.getHeight() bmp.getWidth()) {i = bmp.getWidth();j = bmp.getWidth();} else {i = bmp.getHeight();j = bmp.getHeight();}Bitmap localBitmap = Bitmap.createBitmap(i, j, Bitmap.Config.RGB_565);Canvas localCanvas = new Canvas(localBitmap);while (true) {localCanvas.drawBitmap(bmp, new Rect(0, 0, i, j), new Rect(0, 0,i, j), null);if (needRecycle)bmp.recycle();ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();localBitmap.compress(Bitmap.CompressFormat.JPEG, 100,localByteArrayOutputStream);localBitmap.recycle();byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();try {localByteArrayOutputStream.close();return arrayOfByte;} catch (Exception e) {//F.out(e);}i = bmp.getHeight();j = bmp.getHeight();}}运行后问题解决。
本文参考:https://www.cnblogs.com/wsfjlagr/p/3711796.html
小程序













