Android微信SDK实现分享

来源:互联网 发布:重庆seo服务外包 编辑:程序博客网 时间:2024/05/18 03:52

用微信提供的SDK来实现分享

从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.jar加入到项目中。

微信分享的核心类,部分代码如下:

WechatShareManager.java

package com.jackie.umeng.share;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import android.widget.Toast;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;import com.tencent.mm.sdk.modelmsg.WXImageObject;import com.tencent.mm.sdk.modelmsg.WXMediaMessage;import com.tencent.mm.sdk.modelmsg.WXTextObject;import com.tencent.mm.sdk.modelmsg.WXVideoObject;import com.tencent.mm.sdk.modelmsg.WXWebpageObject;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.WXAPIFactory; /** * 实现微信分享功能的核心类 * @author chengcj1 * */public class WechatShareManager {         private static final int THUMB_SIZE = 150;        public static final int WECHAT_SHARE_WAY_TEXT = 1;   //文字    public static final int WECHAT_SHARE_WAY_PICTURE = 2; //图片    public static final int WECHAT_SHARE_WAY_WEBPAGE = 3;  //链接    public static final int WECHAT_SHARE_WAY_VIDEO = 4; //视频    public static final int WECHAT_SHARE_TYPE_TALK = SendMessageToWX.Req.WXSceneSession;  //会话    public static final int WECHAT_SHARE_TYPE_FRENDS = SendMessageToWX.Req.WXSceneTimeline; //朋友圈        private static WechatShareManager mInstance;    private ShareContent mShareContentText, mShareContentPicture, mShareContentWebpag, mShareContentVideo;    private IWXAPI mWXApi;    private Context mContext;         private WechatShareManager(Context context){        this.mContext = context;        //初始化数据        //初始化微信分享代码        initWechatShare(context);    }         /**     * 获取WeixinShareManager实例     * 非线程安全,请在UI线程中操作     * @return     */    public static WechatShareManager getInstance(Context context){        if(mInstance == null){            mInstance = new WechatShareManager(context);        }        return mInstance;    }         private void initWechatShare(Context context){    if (mWXApi == null) {    mWXApi = WXAPIFactory.createWXAPI(context, WechatShareUtil.WECHAT_APP_ID, true);    }        mWXApi.registerApp(WechatShareUtil.WECHAT_APP_ID);    }         /**     * 通过微信分享     * @param shareWay 分享的方式(文本、图片、链接)     * @param shareType 分享的类型(朋友圈,会话)     */    public void shareByWebchat(ShareContent shareContent, int shareType){        switch (shareContent.getShareWay()) {        case WECHAT_SHARE_WAY_TEXT:            shareText(shareContent, shareType);            break;        case WECHAT_SHARE_WAY_PICTURE:            sharePicture(shareContent, shareType);            break;        case WECHAT_SHARE_WAY_WEBPAGE:            shareWebPage(shareContent, shareType);            break;        case WECHAT_SHARE_WAY_VIDEO:        shareVideo(shareContent, shareType);        break;        }    }         private abstract class ShareContent {        protected abstract int getShareWay();        protected abstract String getContent();        protected abstract String getTitle();        protected abstract String getURL();        protected abstract int getPictureResource();    }         /**     * 设置分享文字的内容     * @author chengcj1     *     */    public class ShareContentText extends ShareContent {        private String content;                 /**         * 构造分享文字类         * @param text 分享的文字内容         */        public ShareContentText(String content){            this.content = content;        }                @Override        protected int getShareWay() {            return WECHAT_SHARE_WAY_TEXT;        }         @Override        protected String getContent() {            return content;        }         @Override        protected String getTitle() {            return null;        }         @Override        protected String getURL() {            return null;        }         @Override        protected int getPictureResource() {            return -1;        }    }        /*     * 获取文本分享对象     */    public ShareContent getShareContentText(String content) {    if (mShareContentText == null) {    mShareContentText = new ShareContentText(content);    }    return (ShareContentText) mShareContentText;    }         /**     * 设置分享图片的内容     * @author chengcj1     *     */    public class ShareContentPicture extends ShareContent {        private int pictureResource;        public ShareContentPicture(int pictureResource){            this.pictureResource = pictureResource;        }                @Override        protected int getShareWay() {            return WECHAT_SHARE_WAY_PICTURE;        }                @Override        protected int getPictureResource() {            return pictureResource;        }                 @Override        protected String getContent() {            return null;        }         @Override        protected String getTitle() {            return null;        }         @Override        protected String getURL() {            return null;        }    }        /*     * 获取图片分享对象     */    public ShareContent getShareContentPicture(int pictureResource) {    if (mShareContentPicture == null) {    mShareContentPicture = new ShareContentPicture(pictureResource);    }    return (ShareContentPicture) mShareContentPicture;    }         /**     * 设置分享链接的内容     * @author chengcj1     *     */    public class ShareContentWebpage extends ShareContent {        private String title;        private String content;        private String url;        private int pictureResource;        public ShareContentWebpage(String title, String content, String url, int pictureResource){            this.title = title;            this.content = content;            this.url = url;            this.pictureResource = pictureResource;        }                @Override        protected int getShareWay() {            return WECHAT_SHARE_WAY_WEBPAGE;        }         @Override        protected String getContent() {            return content;        }         @Override        protected String getTitle() {            return title;        }         @Override        protected String getURL() {            return url;        }         @Override        protected int getPictureResource() {            return pictureResource;        }    }        /*     * 获取网页分享对象     */    public ShareContent getShareContentWebpag(String title, String content, String url, int pictureResource) {    if (mShareContentWebpag == null) {    mShareContentWebpag = new ShareContentWebpage(title, content, url, pictureResource);    }    return (ShareContentWebpage) mShareContentWebpag;    }        /**     * 设置分享视频的内容     * @author chengcj1     *     */    public class ShareContentVideo extends ShareContent {    private String url;    public ShareContentVideo(String url) {    this.url = url;    }@Overrideprotected int getShareWay() {return WECHAT_SHARE_WAY_VIDEO;}@Overrideprotected String getContent() {return null;}@Overrideprotected String getTitle() {return null;}@Overrideprotected String getURL() {return url;}@Overrideprotected int getPictureResource() {return -1;}    }        /*     * 获取视频分享内容     */    public ShareContent getShareContentVideo(String url) {    if (mShareContentVideo == null) {    mShareContentVideo = new ShareContentVideo(url);    }    return (ShareContentVideo) mShareContentVideo;    }          /*     * 分享文字     */    private void shareText(ShareContent shareContent, int shareType) {        String text = shareContent.getContent();        //初始化一个WXTextObject对象        WXTextObject textObj = new WXTextObject();        textObj.text = text;        //用WXTextObject对象初始化一个WXMediaMessage对象        WXMediaMessage msg = new WXMediaMessage();        msg.mediaObject = textObj;        msg.description = text;        //构造一个Req        SendMessageToWX.Req req = new SendMessageToWX.Req();        //transaction字段用于唯一标识一个请求        req.transaction = buildTransaction("textshare");        req.message = msg;        //发送的目标场景, 可以选择发送到会话 WXSceneSession 或者朋友圈 WXSceneTimeline。 默认发送到会话。        req.scene = shareType;        mWXApi.sendReq(req);    }     /*     * 分享图片     */    private void sharePicture(ShareContent shareContent, int shareType) {        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), shareContent.getPictureResource());        WXImageObject imgObj = new WXImageObject(bitmap);                 WXMediaMessage msg = new WXMediaMessage();        msg.mediaObject = imgObj;                 Bitmap thumbBitmap =  Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);        bitmap.recycle();        msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);  //设置缩略图                 SendMessageToWX.Req req = new SendMessageToWX.Req();        req.transaction = buildTransaction("imgshareappdata");        req.message = msg;        req.scene = shareType;        mWXApi.sendReq(req);    }     /*     * 分享链接     */    private void shareWebPage(ShareContent shareContent, int shareType) {        WXWebpageObject webpage = new WXWebpageObject();        webpage.webpageUrl = shareContent.getURL();        WXMediaMessage msg = new WXMediaMessage(webpage);        msg.title = shareContent.getTitle();        msg.description = shareContent.getContent();                 Bitmap thumb = BitmapFactory.decodeResource(mContext.getResources(), shareContent.getPictureResource());        if(thumb == null) {            Toast.makeText(mContext, "图片不能为空", Toast.LENGTH_SHORT).show();        } else {            msg.thumbData = Util.bmpToByteArray(thumb, true);        }                 SendMessageToWX.Req req = new SendMessageToWX.Req();        req.transaction = buildTransaction("webpage");        req.message = msg;        req.scene = shareType;        mWXApi.sendReq(req);    }        /*     * 分享视频     */    private void shareVideo(ShareContent shareContent, int shareType) {    WXVideoObject video = new WXVideoObject();video.videoUrl = shareContent.getURL();WXMediaMessage msg = new WXMediaMessage(video);msg.title = shareContent.getTitle();msg.description = shareContent.getContent();Bitmap thumb = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.send_music_thumb);//BitmapFactory.decodeStream(new URL(video.videoUrl).openStream());/** * 测试过程中会出现这种情况,会有个别手机会出现调不起微信客户端的情况。造成这种情况的原因是微信对缩略图的大小、title、description等参数的大小做了限制,所以有可能是大小超过了默认的范围。 * 一般情况下缩略图超出比较常见。Title、description都是文本,一般不会超过。 */Bitmap thumbBitmap =  Bitmap.createScaledBitmap(thumb, THUMB_SIZE, THUMB_SIZE, true);thumb.recycle();      msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);        SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("video");req.message = msg;req.scene =  shareType;mWXApi.sendReq(req);    }         private String buildTransaction(final String type) {        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();    }}
MainActivity.java

package com.jackie.umeng.share;import com.jackie.umeng.share.WechatShareManager.ShareContentPicture;import com.jackie.umeng.share.WechatShareManager.ShareContentText;import com.jackie.umeng.share.WechatShareManager.ShareContentVideo;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private Button mShareText, mSharePicture, mShareVideo;private WechatShareManager mShareManager; private Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mShareText = (Button) findViewById(R.id.share_text);mSharePicture = (Button) findViewById(R.id.share_picture);mShareVideo = (Button) findViewById(R.id.share_video);mShareText.setOnClickListener(this);mSharePicture.setOnClickListener(this);mShareVideo.setOnClickListener(this);mContext = this;mShareManager = WechatShareManager.getInstance(mContext);}@Overridepublic void onClick(View v) {if (!isWebchatAvaliable()) {Toast.makeText(mContext, "请先安装微信", Toast.LENGTH_LONG).show();return;}switch (v.getId()) {case R.id.share_text:ShareContentText mShareContentText = (ShareContentText) mShareManager.getShareContentText("微信文本分享");mShareManager.shareByWebchat(mShareContentText, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);break;case R.id.share_picture:ShareContentPicture mShareContentPicture = (ShareContentPicture) mShareManager.getShareContentPicture(R.drawable.share);mShareManager.shareByWebchat(mShareContentPicture, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);    break;case R.id.share_video:ShareContentVideo mShareContentVideo = (ShareContentVideo) mShareManager.getShareContentVideo("http://baidu.hz.letv.com/kan/agSlT?fr=v.baidu.com/");mShareManager.shareByWebchat(mShareContentVideo, WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);break;default:break;}}private boolean isWebchatAvaliable() {//检测手机上是否安装了微信try {getPackageManager().getPackageInfo("com.tencent.mm", PackageManager.GET_ACTIVITIES);return true;} catch (Exception e) {return false;}}}




2 0