android微信分享及回调
最近项目中接入了微信分享截图,遇到不少坑,在此记录一下。
1、简单介绍一下微信分享的接入(需要先到微信开放平台申请appId,在AndroidStudio的build.gradle中添加微信的依赖或在libs下添加jar包)
1)首先在Activity的onCreate方法中
IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);
iwxapi.registerApp(APP_ID);
2)定义方法用于分享图片,自己提供个按钮调用就行了
//type用于区分是分享到朋友圈还是分享给朋友,0是朋友,1是朋友圈(自己定义)
private void shareBitmapToWX(int type) {
//shareBitmap是用于分享的bitmap
if (shareBitmap != null) {
WXImageObject wxImageObject = new WXImageObject(shareBitmap );
WXMediaMessage mediaMessage = new WXMediaMessage();
mediaMessage.mediaObject = wxImageObject;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(shareBitmap , 30, 30, true);
mediaMessage.thumbData = bmpToByteArray(scaledBitmap, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = mediaMessage;
req.scene = type == 0? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
iwxapi.sendReq(req);
}
}
private static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
Log.d(e.getMessage());
}
return result;
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
2、微信分享的回调
接收微信分享回调必须在自己工程的包名下创建wxapi.WXEntryActivity类
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI iwxapi;
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wx);
initData();
}
private void initData() {
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);
iwxapi.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
//接收回调的方法
@Override
public void onResp(BaseResp baseResp) {
String result = "";
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
//分享成功
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//分享取消
break;
default:
break;
}
LogUtil.d("wx_share_result:" + result);
this.finish();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
initData();
}
}
3、onResp中接收分享的回调,但是问题来了,我怎么区分这个是分享到朋友圈成功的回调还是分享给朋友的呢?微信分享貌似提供没有区分这个的方法,于是思考一番后,我用了以下办法:
分享给朋友和朋友圈是两个按钮的点击事件,我就在每次点击按钮的时候用一个全局变量做下标记,比如点击分享到朋友圈时将该变量赋值为0,点击分享给朋友时将该变量赋值为1,
在接收回调的地方判断一下该变量的值,就能区分是哪个分享的回调
case BaseResp.ErrCode.ERR_OK:
if (DataUtil.SHARE_MODE == DataUtil.WX_TIMELINE) {
//分享到朋友圈
} else if (DataUtil.SHARE_MODE == DataUtil.WX_SESSION) {
//分享到朋友
}
break;
这样,就完成了微信分享及其回调处理!
浙公网安备 33010602011771号