微信分享官方第三方接入:
第一步、官方接入文档必须要读的。
第二步、导入jar包
第三步、权限支持。在AndroidManifest.xml中
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第四步、注册到微信。
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;wxapi = WXAPIFactory.createWXAPI(getApplicationContext(),
Constants.APP_ID);
// 将该app注册到微信
<span style="white-space:pre"> </span> api.registerApp(Constants.APP_ID);
若不加这句,则可能需要用签名包才能注册
第五步、分享一条文本消息。
sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。
本次我们使用sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。
举个栗子:
Override
public void onClick(DialogInterface dialog, int which) {
String text = editor.getText().toString();
if (text == null || text.length() == 0) {
return;
}
// 初始化一个WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj.text = text;
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
// 发送文本类型的消息时,title字段不起作用
// msg.title = "Will be ignored";
msg.description = text;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
req.message = msg;
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
// 调用api接口发送数据到微信
api.sendReq(req);
finish();
}
}, null);
}
});
基本上。完成上面的操作就可以分享文字到微信了。
第五步、分享图片到微信。
普通图片不多说,说下截图分享。直接上代码:
/**
* 分享一个图片
*
* @author YOLANDA
* @param wxApi
* @param shareBitmap
* 要分享的图片
* @param isToFriend
* 是否是分享到朋友圈
*/
public static void shareImg(IWXAPI wxApi, Bitmap shareBitmap,
boolean isToFriend, String title, String content) {
WXImageObject imgObj = new WXImageObject(shareBitmap);
WXMediaMessage msg = new WXMediaMessage();
if (TextUtils.isEmpty(title)) {
title = content;
} else {
if (TextUtils.isEmpty(title.trim())) {
title = content;
}
}
msg.title = title;
msg.description = content;
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(shareBitmap, MeasureSpec
.makeMeasureSpec(shareBitmap.getWidth() / 10,
MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(
shareBitmap.getHeight() / 10, MeasureSpec.UNSPECIFIED), true);
msg.thumbData = bmpToByteArray(thumbBmp); // 设置缩略图
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isToFriend ? SendMessageToWX.Req.WXSceneTimeline
: SendMessageToWX.Req.WXSceneSession;
wxApi.sendReq(req);
}
/**
* 得到Bitmap的byte
*
* @author YOLANDA
* @param bmp
* @param needRecycle
* @return
*/
private static byte[] bmpToByteArray(Bitmap bmp) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 构建一个唯一标志
*
* @author YOLANDA
* @param type
* @return
*/
private static String buildTransaction(String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis())
: (type + System.currentTimeMillis());
}
注意一:
SendMessageToWX.Req.WXSceneTimeline
SendMessageToWX.Req.WXSceneSession
SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。
如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况, 可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。
scene默认值为WXSceneSession。
注意二、如果分享的时候出现闪一下没有任何反应。
去微信官网,注册appID,用正确的APPID,绑定成功再试试。