转自:http://blog.csdn.net/qq_27428337/article/details/51501348
说明
只是简单的介绍通过IWXAPI的 sendReq将请求发送到微信终端,分享信息。
基本参考微信开放平台微信开放平台接入指南总结部分API
介绍
微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。
简单介绍大概流程
- 微信开房平台注册登录;
- 创建应用(包名可以修改)获取appId;
- 下载libammsdk.jar导入到eclipse/Android Studio中,配置清单文件的相关权限;
- 在使用处如:Activity的onCreate、Fragment的onCreateView处初始化和注册IWXAPI,建立起app与微信的通信;
- 添加分享代码。
初始化注册及分享代码思路
1. 初始化注册
//APP_ID为从官网申请到的appId
private static final String APP_ID = "";
//IWXAPI是第三方app和微信通信的openapi接口
private IWXAPI api;private void regToWx(){
//通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, APP_ID,true);
//将应用的appId注册到微信
api.resterApp(APP_ID);
}
方法 | 说明 |
---|---|
boolean isWXAppInstalled() | 用于检查本机是否安转微信 |
2. 根据不同的分享对象创建不同的媒体对象封装
分享对象 | 封装对象 | 示例 | 不能超过的长度 |
---|---|---|---|
文字 | WXTextObject | 构造函数:WXTextObject(String shareText); 或者是用属性public String text 赋值 | 10KB |
图片 | WXImageObject | 构造函数WXImageObject(Bitmap shareImage); WXImageObject(byte[] shareImage) 或者属性public byte[] imageData 封装图片二进制数据、属性public String imagePate 封装本地图片路径以及方法public void setImagePath(String imagePath)封装网络图片 | 10MB |
音乐 | WXMusicObject | 属性public String musicUrl 属性封装音频网站的URL地址 | 10KB(地址) |
视频 | WXVideoObject | 属性public String videoUrl 属性封装视频链接 | 10KB(地址) |
网页 | WXWebpageObject | 属性public String webpageUrl 属性封装html链接 | 10KB(地址) |
表情 | WXEmojiObject | 构造函数WXEmojiObject(String emojiPath); 和WXEmojiObject(byte[] emojiData); 或者是方法public void setEmojiData(byte[] emojiData) 和public void setEmojiPath(String emojiPath) |
这五个类都是Interface WXMediaMessage.IMediaObject
的子类。
3. 创建WXMediaMessage用来接受被封装的对象。
属性 | 作用 | 不能超过的长度 |
---|---|---|
public WXMediaMessage.IMediaObject mediaObject | 接受封装的媒体对象 | |
public java.lang.String description | 分享显示的消息描述 | 1KB |
public java.lang.String title | 分享消息标题 | 512Bytes |
public byte[] thumbData | 分享显示的缩略图的二进制数据 | 32KB |
一般缩略图,是将bitmap通过其public boolean compress(CompressFormat format, int quality, OutputStream stream)
方法要压缩后获取。
参考方法
//将bitmap转换为byte[]格式
private byte[] bmpToByteArray(final Bitmap bitmap, final boolean needRecycle){
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
if(needRecyle){
bitmap.recyle();
}
byte[] result = output.toByteArray();
try{
output.close;
}catch(Exception e){
e.printStackTrace();
}
return result;
}
4.创建SendMessageToWX.Req用于发送数据
在这里可是设置是分享给朋友、分享到朋友圈还是收藏。
属性 | 说明 |
---|---|
public WXMediaMessage message | 分享请求的WXMediaMessage数据 |
public int scene | 发送的目标场景, 可以选择发送到会话 WXSceneSession 或者朋友圈 WXSceneTimeline。 默认发送到会话。 |
public static final int WXSceneTimeline | 发送的目标场景,表示发送朋友圈 |
public static final int WXSceneSession | 发送的目标场景,表示发送到会话 |
public static final int WXSceneFavorite | 发送的目标场景,表示发送到微信收藏 |
public java.lang.String transaction | 来自父类BaseReq,对应该请求的事务ID,通常由Req发起,回复Resp时应填入对应事务ID,一般用类型+当前时间毫秒值表示 |
tracsaction生成方法
private String buildTransaction(final String type){
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
5.发送
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
int options = 100;
DebugUtils.debug("TOOL", "压缩前bmpToByteArray: " + output.toByteArray().length);
while (output.toByteArray().length / 1024 >= IMAGE_SIZE && options != 10) {
output.reset(); //清空output
bmp.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
options -= 10;
DebugUtils.debug("TOOL", "压缩bmpToByteArray1: " + output.toByteArray().length);
}
DebugUtils.debug("TOOL", "压缩后bmpToByteArray: " + output.toByteArray().length);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}