Weex初体验之微信分享模块

微信分享模块

首先继承微信分享的SDK:

    在build.config中添加 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'


之后编写分享代码:

public class WxShareManager {

    private IWXAPI mIWxApi;

    //是否注册
    private boolean mIsRegister;

    private JSCallback mJsCallback;

    private WxShareManager() {
        Activity activity = WXApplication.getInstance().getTopActivity();

        if (activity != null) {
            mIWxApi = WXAPIFactory.createWXAPI(activity, "yourKey");
        } else {
            mIWxApi = WXAPIFactory.createWXAPI(WXApplication.getInstance(), "yourKey");
        }

        mIsRegister = mIWxApi.registerApp("yourKey");
    }


    private static class WxInstance {
        private static final WxShareManager mInstance = new WxShareManager();
    }

    public static WxShareManager getInstance() {
        return WxInstance.mInstance;
    }


    public IWXAPI getWXApi() {
        return mIWxApi;
    }

    public void sendResult(String result) {
        if (mJsCallback != null) {
            mJsCallback.invoke(result);
            mJsCallback = null;
        }
    }

    public void setJsCallback(JSCallback mJsCallback) {
        this.mJsCallback = mJsCallback;
    }

    public boolean isWXAppInstalled() {
        return mIWxApi.isWXAppInstalled();
    }

    /**
     * 微信分享
     *
     * @param type        friendCircle(朋友圈),friends(好友)
     * @param url         分享地址
     * @param title       标题
     * @param description 描述
     * @param imageUrl    图片地址
     */
    public void shareMessage(String type, String url, String title, String description, String imageUrl) {
        //未注册
        if (!mIsRegister) {
            mIsRegister = mIWxApi.registerApp("yourKey");
        }

        WXWebpageObject webPage = new WXWebpageObject();
        webPage.webpageUrl = url;
        WXMediaMessage msg = new WXMediaMessage(webPage);
        msg.title = title;
        msg.description = description;
        Bitmap bmp = BitmapFactory.decodeResource(WXApplication.getInstance().getResources(), R.mipmap.ic_launcher);

        //图片宽高
        int THUMB_SIZE = 150;

        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
        bmp.recycle();
        msg.thumbData = bmpToByteArray(thumbBmp);

        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = String.valueOf(System.currentTimeMillis());
        req.message = msg;

        //发送给朋友圈关键标志
        if ("friendCircle".equals(type)) {
            req.scene = SendMessageToWX.Req.WXSceneTimeline;
            boolean result = mIWxApi.sendReq(req);

            if (!result) {
                sendResult("分享失败!");
            }
        } else if ("friends".equals(type)) {
            //会话
            req.scene = SendMessageToWX.Req.WXSceneSession;
            boolean result = mIWxApi.sendReq(req);

            if (!result) {
                sendResult("分享失败!");
            }
        } else {
            LogUtil.e("分享类型错误");
            sendResult("分享类型错误!");
        }

    }

    private byte[] bmpToByteArray(final Bitmap bmp) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
        bmp.recycle();

        byte[] result = output.toByteArray();
        try {
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

}

下面是接收分享结果的Activity代码,只能放置在appId.wxapi包下,只能WXEntryActivity

appId:本应用的包名

package com.lakala.cloudpos.accountmanager.wxapi;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;

import com.lakala.cloudpos.accountmanager.R;
import com.lakala.cloudpos.accountmanager.activity.BaseActivity;
import com.lakala.cloudpos.accountmanager.manager.WxShareManager;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;

/**
 * 微信分享Activity 只能在packageName.wxapi包名下,只能是WXEntryActivity这个名称
 */
public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            WxShareManager.getInstance().getWXApi().handleIntent(getIntent(), this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        setIntent(intent);
        WxShareManager.getInstance().getWXApi().handleIntent(intent, this);
    }

    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq req) {

    }

    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    @Override
    public void onResp(BaseResp resp) {
        String result;

        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                result = getString(R.string.errcode_success);
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                result = getString(R.string.errcode_cancel);
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                result = getString(R.string.errcode_deny);
                break;
            case BaseResp.ErrCode.ERR_UNSUPPORT:
                result = getString(R.string.errcode_unsupported);
                break;
            default:
                result = getString(R.string.errcode_unknown);
                break;
        }

        WxShareManager.getInstance().sendResult(result);
        finish();
    }
}

在manifest中配置当前Activity

<!--微信分享Activity-->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:exported="true"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@style/transparentStyle" />

分享模块调用

    @JSMethod
    @Override
    public boolean wxShare(String params, JSCallback callback) {

        if (!WxShareManager.getInstance().isWXAppInstalled()) {
            LogUtil.d("微信未安装!");
            if (callback != null) {
                callback.invoke("微信未安装!");
            }
            return false;
        }

        if (TextUtils.isEmpty(params)) {
            LogUtil.d("数据为空!");
            if (callback != null) {
                callback.invoke("数据为空!");
            }
            return false;
        }

        //设置回调
        WxShareManager.getInstance().setJsCallback(callback);

        JSONObject jsonObject = JSON.parseObject(params);

        if (jsonObject != null) {
            //'类型  friendCircle(朋友圈),friends(好友)'
            String type = jsonObject.getString("type");
            //'分享链接'
            String url = jsonObject.getString("url");
            //'标题'
            String title = jsonObject.getString("title");
            //'描述'
            String description = jsonObject.getString("description");
            //'图片地址'
            String imageUrl = jsonObject.getString("imageUrl");

            WxShareManager.getInstance().shareMessage(type, url, title, description, imageUrl);

            return true;
        }

        return false;
    }

接着当然是注册模块啦

try {
    //注册分享相关
    WXSDKEngine.registerModule("shareModule", ShareModule.class);
} catch (WXException e) {
    LogUtil.e(e.getMessage());
}

下一篇:Weex-Android数据交互

猜你喜欢

转载自blog.csdn.net/q957789074/article/details/80731311