Android微信分享小结

来源:互联网 发布:js回调函数有什么用 编辑:程序博客网 时间:2024/06/06 05:29

转自:http://blog.csdn.net/qq_27428337/article/details/51501348

说明

只是简单的介绍通过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

privatestaticfinal String APP_ID = "";

//IWXAPI是第三方app和微信通信的openapi接口

private IWXAPI api;privatevoidregToWx(){  

//通过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分享显示的消息描述1KBpublic java.lang.String title分享消息标题512Bytespublic byte[] thumbData分享显示的缩略图的二进制数据32KB

一般缩略图,是将bitmap通过其public boolean compress(CompressFormat format, int quality, OutputStream stream)方法要压缩后获取。

参考方法

//将bitmap转换为byte[]格式

privatebyte[]bmpToByteArray(final Bitmap bitmap, finalboolean 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.sendReq(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;
}




0 0