微信分享模块
首先继承微信分享的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()); }