首先继承微信分享的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
@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数据交互