说明


只是简单的介绍通过IWXAPI的 sendReq将请求发送到微信终端,分享信息。 
基本参考微信开放平台微信开放平台接入指南总结部分API

介绍


微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。



简单介绍大概流程

  1. 微信开房平台注册登录;
  2. 创建应用(包名可以修改)获取appId;
  3. 下载libammsdk.jar导入到eclipse/Android Studio中,配置清单文件的相关权限;
  4. 在使用处如:Activity的onCreate、Fragment的onCreateView处初始化和注册IWXAPI,建立起app与微信的通信;
  5. 添加分享代码。

初始化注册及分享代码思路

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

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.发送


api.sendRe q(req) ;




自己项目中的总结是:微信分享,图片,标题,描述都有文字或者图片大小限制,尤其缩略图的限制,超过大小不能唤起微信客户端的,图片需要做压缩处理


提供方法如下:





public static byte[] bmpToByteArray(Bitmap bmp, boolean needRecycle, int IMAGE_SIZE) {
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;
}