Android微信分享
需要注册开发者账号并且创建应用
微信开放平台
相关操作
在微信开放平台下载微信的jar包并导入项目。
libammsdk.jar
导入相应的类。
import com.tencent.mm.sdk.openapi.WXTextObject;
添加相应权限。
<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"/>
注册到微信。
// APP_ID是应用的appId
private static final String APP_ID="";
// IWXAPI是第三方app和微信通信的openapi接口
private IWXAPI api;
private void regToWx(){
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(getApplicationContext(),APP_ID,true);
// 将应用注册到微信
api.registerApp(APP_ID);
}
发送请求或响应到微信。
- sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面(使用该方法)。
boolean sendReq(BaseReq req);
- sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。
boolean sendResp(BaseResp resp);
- 注意:SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况, 可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。scene默认值为WXSceneSession。
- Req.scene的类型
- 分享到朋友圈 Req.scene = SendMessageToWX.Req.WXSceneTimeline
- 分享到好友会话 Req.scene = SendMessageToWX.Req.WXSceneSession
- 添加到微信收藏 Req.scene = SendMessageToWX.Req.WXSceneFavorite
// 发送文字
// 初始化一个WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj.text = text;
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessagemsg = new WXMediaMessage();
msg.mediaObject = textObj;
msg.description = text;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
// transaction字段用于唯一标识一个请求
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
// 分享到朋友圈 Req.scene = SendMessageToWX.Req.WXSceneTimeline
// 分享到好友会话 Req.scene = SendMessageToWX.Req.WXSceneSession
// 添加到微信收藏 Req.scene = SendMessageToWX.Req.WXSceneFavorite
req.scene = isTimelineCb.isCHecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;
// 调用api接口发送数据到微信
api.sendReq(req);
// 发送图片
Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.image);
// 初始化WXImageObjcet和WXMediaMessage对象
WXImageObject imgObj = new WXImageObject(bmp);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
// 设置缩略图
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp,THUMB_SIZE,THUMB_SIZE,true);
// 回收
bmp.recycle();
msg.thumbData = bmpToByteArray(thumbBmp,true);
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
// transaction字段用于唯一标识一个请求
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
req.scene = isTimelineCb.isCHecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;
// 调用api接口发送数据到微信
api.sendReq(req);
/**
* 将Bitmap转换成byte
* @param bmp
* @param needRecycle
* @return
*/
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
代码混淆
-keep class com.tencent.mm.sdk.** {
*;
}