在grdle里
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
在WXEntryActivity类
@Override
public void onResp(BaseResp baseResp) {
int errCode = baseResp.errCode;
if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
String extraData =launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
}
接下来再需要的地方写如下代码:
private void shareMiniProgram() {
String appId = ConstantValues.APP_ID; // 填应用AppId
IWXAPI api = WXAPIFactory.createWXAPI(mContext, appId);
WXMiniProgramObject miniProgramObj = new WXMiniProgramObject();
miniProgramObj.webpageUrl = "http://www.qq.com"; // 兼容低版本的网页链接
miniProgramObj.miniprogramType = WXMiniProgramObject.MINIPTOGRAM_TYPE_RELEASE;// 正式版:0,测试版:1,体验版:2
miniProgramObj.userName = "gh_890e142ba85"; // 小程序原始id
miniProgramObj.path = “pages/xxx/xxx”; //小程序页面路径;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"
WXMediaMessage msg = new WXMediaMessage(miniProgramObj);
msg.title = “title”; // 小程序消息title
msg.description = "描述"; // 小程序消息desc
Bitmap bitmap = ImageUtil.getBitMBitmap(mGoodsDetial.getCover());
byte[] bytes = ImageUtil.compressByQuality(bitmap, 120, true);
msg.thumbData = bytes;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("miniProgram");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession; // 目前只支持会话
api.sendReq(req);
}
private static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
详细说一下这个加载小程序封面图的问题,也就是如下代码:
Bitmap bitmap = ImageUtil.getBitMBitmap(mGoodsDetial.getCover());
byte[] bytes = ImageUtil.compressByQuality(bitmap, 120, true);
msg.thumbData = bytes;
第一种情况加载本地图片的时候:可将以上代码换成下边即可
Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.fightk);
Bitmap sendBitmap = Bitmap.createScaledBitmap(bitmap,200,200,true);
bitmap.recycle();
mediaMessage.thumbData = Util.bmpToByteArray(sendBitmap,true);
第二种加载图片url,也就是以上所写的那样,因为图片超过128k无法分享,所以要将其压缩
另外涉及到的两个方法:
/**
* 图片url转bitmap
*/
public static Bitmap getBitMBitmap(String urlpath) {
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/**
* 按质量压缩图片
*
* @param src bitmap图片
* @param maxByteSize 最大字节数
* @param recycle
* @return
*/
public static byte[] compressByQuality(final Bitmap src, final long maxByteSize, final boolean recycle) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
src.compress(CompressFormat.JPEG, 100, baos);
byte[] bytes;
if (baos.size() <= maxByteSize) {
bytes = baos.toByteArray();
} else {
baos.reset();
src.compress(CompressFormat.JPEG, 0, baos);
if (baos.size() >= maxByteSize) {
bytes = baos.toByteArray();
} else {
// find the best quality using binary search
int st = 0;
int end = 100;
int mid = 0;
while (st < end) {
mid = (st + end) / 2;
baos.reset();
src.compress(CompressFormat.JPEG, mid, baos);
int len = baos.size();
if (len == maxByteSize) {
break;
} else if (len > maxByteSize) {
end = mid - 1;
} else {
st = mid + 1;
}
}
if (end == mid - 1) {
baos.reset();
src.compress(CompressFormat.JPEG, st, baos);
}
bytes = baos.toByteArray();
}
}
if (recycle && !src.isRecycled()) src.recycle();
return bytes;
}