Android微信SDK实现分享
来源:互联网 发布:asp.net 明细数据输入 编辑:程序博客网 时间:2024/05/18 01:20
摘自:http://blog.csdn.net/shineflowers/article/details/47951965
用微信提供的SDK来实现分享
从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.jar加入到项目中。
微信分享的核心类,部分代码如下:
WechatShareManager.Java
[java] view plain copy
- 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 = WechatShareUtil.bitmapToByteArray(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 = WechatShareUtil.bitmapToByteArray(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 = WechatShareUtil.bitmapToByteArray(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();
- }
- }
[java] view plain copy
- 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;
- @Override
- protected 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);
- }
- @Override
- public 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;
- }
- }
- }
0 0
- Android微信SDK实现分享
- Android微信SDK实现分享
- Android微信SDK实现分享
- Android微信SDK分享实现,及分享结果监测
- 试用友盟SDK实现Android分享微信朋友圈
- 利用微信SDK实现分享
- 微信sdk分享功能实现
- 微信JS-SDK实现分享功能
- Android系统分享,微信SDK分享,ShareSdk分享
- Android微信SDK分享功能接入
- 微信分享SDK
- 不用微信SDK实现图片分享或文字分享
- Android分享SDK模块化-------微信分享基础篇
- Android微信实现分享
- Android不经过第三方\官方SDK直接使用Intent快捷实现QQ微信分享
- cocos2dx3.15接入微信SDK实现登录和分享android studio2.3.3
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到QQ,分享到微博
- [Android分享] 不使用官方SDK,实现微信分享(发送到朋友,发送到朋友圈)
- [Android]Android超高仿微信图片选择器
- python清除字符串中间空格的方法
- QDBus与gdbus的数据传递详解
- Vuforia新版本中的视频播放——VideoPlayback
- 编译linux内核错误Assembler message的问题
- Android微信SDK实现分享
- YII2框架中不用composer而是手动使用插件配置方法
- mmo手游地图同步总结
- 机器学习中的数学
- Hadoop学习之路——重新格式化HDFS的方法
- Jsp-语法
- OC 封装 继承 多态
- Insight spring @Async 工作机制
- 获取当前正在活动的activity信息