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;

 这样,就完成了微信分享及其回调处理! 

 

posted on 2017-07-21 14:35  风二中  阅读(910)  评论(0编辑  收藏  举报