用微信提供的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; }@Override protected int getShareWay() {return WECHAT_SHARE_WAY_VIDEO; }@Override protected String getContent() {return null; }@Override protected String getTitle() {return null; }@Override protected String getURL() {return url; }@Override protected 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; }} }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。