Android微信SDK实现分享
用微信提供的SDK来实现分享:
从http://open.weixin.qq.com下载Android相关的jar包,将libammsdk.jar加入到项目中。
微信分享的核心类,部分代码如下:
WechatShareManager.java
packagecom.jackie.umeng.share;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.util.Log;
importandroid.widget.Toast;
importcom.tencent.mm.sdk.modelmsg.SendMessageToWX;
importcom.tencent.mm.sdk.modelmsg.WXImageObject;
importcom.tencent.mm.sdk.modelmsg.WXMediaMessage;
importcom.tencent.mm.sdk.modelmsg.WXTextObject;
importcom.tencent.mm.sdk.modelmsg.WXVideoObject;
importcom.tencent.mm.sdk.modelmsg.WXWebpageObject;
importcom.tencent.mm.sdk.openapi.IWXAPI;
importcom.tencent.mm.sdk.openapi.WXAPIFactory;
/**
*实现微信分享功能的核心类
*@authorchengcj1
*
*/
publicclassWechatShareManager{
privatestaticfinalintTHUMB_SIZE=150;
publicstaticfinalintWECHAT_SHARE_WAY_TEXT=1;//文字
publicstaticfinalintWECHAT_SHARE_WAY_PICTURE=2;//图片
publicstaticfinalintWECHAT_SHARE_WAY_WEBPAGE=3;//链接
publicstaticfinalintWECHAT_SHARE_WAY_VIDEO=4;//视频
publicstaticfinalintWECHAT_SHARE_TYPE_TALK=SendMessageToWX.Req.WXSceneSession;//会话
publicstaticfinalintWECHAT_SHARE_TYPE_FRENDS=SendMessageToWX.Req.WXSceneTimeline;//朋友圈
privatestaticWechatShareManagermInstance;
privateShareContentmShareContentText,mShareContentPicture,mShareContentWebpag,mShareContentVideo;
privateIWXAPImWXApi;
privateContextmContext;
privateWechatShareManager(Contextcontext){
this.mContext=context;
//初始化数据
//初始化微信分享代码
initWechatShare(context);
}
/**
*获取WeixinShareManager实例
*非线程安全,请在UI线程中操作
*@return
*/
publicstaticWechatShareManagergetInstance(Contextcontext){
if(mInstance==null){
mInstance=newWechatShareManager(context);
}
returnmInstance;
}
privatevoidinitWechatShare(Contextcontext){
if(mWXApi==null){
mWXApi=WXAPIFactory.createWXAPI(context,WechatShareUtil.WECHAT_APP_ID,true);
}
mWXApi.registerApp(WechatShareUtil.WECHAT_APP_ID);
}
/**
*通过微信分享
*@paramshareWay分享的方式(文本、图片、链接)
*@paramshareType分享的类型(朋友圈,会话)
*/
publicvoidshareByWebchat(ShareContentshareContent,intshareType){
switch(shareContent.getShareWay()){
caseWECHAT_SHARE_WAY_TEXT:
shareText(shareContent,shareType);
break;
caseWECHAT_SHARE_WAY_PICTURE:
sharePicture(shareContent,shareType);
break;
caseWECHAT_SHARE_WAY_WEBPAGE:
shareWebPage(shareContent,shareType);
break;
caseWECHAT_SHARE_WAY_VIDEO:
shareVideo(shareContent,shareType);
break;
}
}
privateabstractclassShareContent{
protectedabstractintgetShareWay();
protectedabstractStringgetContent();
protectedabstractStringgetTitle();
protectedabstractStringgetURL();
protectedabstractintgetPictureResource();
}
/**
*设置分享文字的内容
*@authorchengcj1
*
*/
publicclassShareContentTextextendsShareContent{
privateStringcontent;
/**
*构造分享文字类
*@paramtext分享的文字内容
*/
publicShareContentText(Stringcontent){
this.content=content;
}
@Override
protectedintgetShareWay(){
returnWECHAT_SHARE_WAY_TEXT;
}
@Override
protectedStringgetContent(){
returncontent;
}
@Override
protectedStringgetTitle(){
returnnull;
}
@Override
protectedStringgetURL(){
returnnull;
}
@Override
protectedintgetPictureResource(){
return-1;
}
}
/*
*获取文本分享对象
*/
publicShareContentgetShareContentText(Stringcontent){
if(mShareContentText==null){
mShareContentText=newShareContentText(content);
}
return(ShareContentText)mShareContentText;
}
/**
*设置分享图片的内容
*@authorchengcj1
*
*/
publicclassShareContentPictureextendsShareContent{
privateintpictureResource;
publicShareContentPicture(intpictureResource){
this.pictureResource=pictureResource;
}
@Override
protectedintgetShareWay(){
returnWECHAT_SHARE_WAY_PICTURE;
}
@Override
protectedintgetPictureResource(){
returnpictureResource;
}
@Override
protectedStringgetContent(){
returnnull;
}
@Override
protectedStringgetTitle(){
returnnull;
}
@Override
protectedStringgetURL(){
returnnull;
}
}
/*
*获取图片分享对象
*/
publicShareContentgetShareContentPicture(intpictureResource){
if(mShareContentPicture==null){
mShareContentPicture=newShareContentPicture(pictureResource);
}
return(ShareContentPicture)mShareContentPicture;
}
/**
*设置分享链接的内容
*@authorchengcj1
*
*/
publicclassShareContentWebpageextendsShareContent{
privateStringtitle;
privateStringcontent;
privateStringurl;
privateintpictureResource;
publicShareContentWebpage(Stringtitle,Stringcontent,Stringurl,intpictureResource){
this.title=title;
this.content=content;
this.url=url;
this.pictureResource=pictureResource;
}
@Override
protectedintgetShareWay(){
returnWECHAT_SHARE_WAY_WEBPAGE;
}
@Override
protectedStringgetContent(){
returncontent;
}
@Override
protectedStringgetTitle(){
returntitle;
}
@Override
protectedStringgetURL(){
returnurl;
}
@Override
protectedintgetPictureResource(){
returnpictureResource;
}
}
/*
*获取网页分享对象
*/
publicShareContentgetShareContentWebpag(Stringtitle,Stringcontent,Stringurl,intpictureResource){
if(mShareContentWebpag==null){
mShareContentWebpag=newShareContentWebpage(title,content,url,pictureResource);
}
return(ShareContentWebpage)mShareContentWebpag;
}
/**
*设置分享视频的内容
*@authorchengcj1
*
*/
publicclassShareContentVideoextendsShareContent{
privateStringurl;
publicShareContentVideo(Stringurl){
this.url=url;
}
@Override
protectedintgetShareWay(){
returnWECHAT_SHARE_WAY_VIDEO;
}
@Override
protectedStringgetContent(){
returnnull;
}
@Override
protectedStringgetTitle(){
returnnull;
}
@Override
protectedStringgetURL(){
returnurl;
}
@Override
protectedintgetPictureResource(){
return-1;
}
}
/*
*获取视频分享内容
*/
publicShareContentgetShareContentVideo(Stringurl){
if(mShareContentVideo==null){
mShareContentVideo=newShareContentVideo(url);
}
return(ShareContentVideo)mShareContentVideo;
}
/*
*分享文字
*/
privatevoidshareText(ShareContentshareContent,intshareType){
Stringtext=shareContent.getContent();
//初始化一个WXTextObject对象
WXTextObjecttextObj=newWXTextObject();
textObj.text=text;
//用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessagemsg=newWXMediaMessage();
msg.mediaObject=textObj;
msg.description=text;
//构造一个Req
SendMessageToWX.Reqreq=newSendMessageToWX.Req();
//transaction字段用于唯一标识一个请求
req.transaction=buildTransaction("textshare");
req.message=msg;
//发送的目标场景,可以选择发送到会话WXSceneSession或者朋友圈WXSceneTimeline。默认发送到会话。
req.scene=shareType;
mWXApi.sendReq(req);
}
/*
*分享图片
*/
privatevoidsharePicture(ShareContentshareContent,intshareType){
Bitmapbitmap=BitmapFactory.decodeResource(mContext.getResources(),shareContent.getPictureResource());
WXImageObjectimgObj=newWXImageObject(bitmap);
WXMediaMessagemsg=newWXMediaMessage();
msg.mediaObject=imgObj;
BitmapthumbBitmap=Bitmap.createScaledBitmap(bitmap,THUMB_SIZE,THUMB_SIZE,true);
bitmap.recycle();
msg.thumbData=Util.bmpToByteArray(thumbBitmap,true);//设置缩略图
SendMessageToWX.Reqreq=newSendMessageToWX.Req();
req.transaction=buildTransaction("imgshareappdata");
req.message=msg;
req.scene=shareType;
mWXApi.sendReq(req);
}
/*
*分享链接
*/
privatevoidshareWebPage(ShareContentshareContent,intshareType){
WXWebpageObjectwebpage=newWXWebpageObject();
webpage.webpageUrl=shareContent.getURL();
WXMediaMessagemsg=newWXMediaMessage(webpage);
msg.title=shareContent.getTitle();
msg.description=shareContent.getContent();
Bitmapthumb=BitmapFactory.decodeResource(mContext.getResources(),shareContent.getPictureResource());
if(thumb==null){
Toast.makeText(mContext,"图片不能为空",Toast.LENGTH_SHORT).show();
}else{
msg.thumbData=Util.bmpToByteArray(thumb,true);
}
SendMessageToWX.Reqreq=newSendMessageToWX.Req();
req.transaction=buildTransaction("webpage");
req.message=msg;
req.scene=shareType;
mWXApi.sendReq(req);
}
/*
*分享视频
*/
privatevoidshareVideo(ShareContentshareContent,intshareType){
WXVideoObjectvideo=newWXVideoObject();
video.videoUrl=shareContent.getURL();
WXMediaMessagemsg=newWXMediaMessage(video);
msg.title=shareContent.getTitle();
msg.description=shareContent.getContent();
Bitmapthumb=BitmapFactory.decodeResource(mContext.getResources(),R.drawable.send_music_thumb);
//BitmapFactory.decodeStream(newURL(video.videoUrl).openStream());
/**
*测试过程中会出现这种情况,会有个别手机会出现调不起微信客户端的情况。造成这种情况的原因是微信对缩略图的大小、title、description等参数的大小做了限制,所以有可能是大小超过了默认的范围。
*一般情况下缩略图超出比较常见。Title、description都是文本,一般不会超过。
*/
BitmapthumbBitmap=Bitmap.createScaledBitmap(thumb,THUMB_SIZE,THUMB_SIZE,true);
thumb.recycle();
msg.thumbData=Util.bmpToByteArray(thumbBitmap,true);
SendMessageToWX.Reqreq=newSendMessageToWX.Req();
req.transaction=buildTransaction("video");
req.message=msg;
req.scene=shareType;
mWXApi.sendReq(req);
}
privateStringbuildTransaction(finalStringtype){
return(type==null)?String.valueOf(System.currentTimeMillis()):type+System.currentTimeMillis();
}
}
MainActivity.java
packagecom.jackie.umeng.share;
importcom.jackie.umeng.share.WechatShareManager.ShareContentPicture;
importcom.jackie.umeng.share.WechatShareManager.ShareContentText;
importcom.jackie.umeng.share.WechatShareManager.ShareContentVideo;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.pm.PackageManager;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.Toast;
publicclassMainActivityextendsActivityimplementsOnClickListener{
privateButtonmShareText,mSharePicture,mShareVideo;
privateWechatShareManagermShareManager;
privateContextmContext;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
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
publicvoidonClick(Viewv){
if(!isWebchatAvaliable()){
Toast.makeText(mContext,"请先安装微信",Toast.LENGTH_LONG).show();
return;
}
switch(v.getId()){
caseR.id.share_text:
ShareContentTextmShareContentText=(ShareContentText)mShareManager.getShareContentText("微信文本分享");
mShareManager.shareByWebchat(mShareContentText,WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);
break;
caseR.id.share_picture:
ShareContentPicturemShareContentPicture=(ShareContentPicture)mShareManager.getShareContentPicture(R.drawable.share);
mShareManager.shareByWebchat(mShareContentPicture,WechatShareManager.WECHAT_SHARE_TYPE_FRENDS);
break;
caseR.id.share_video:
ShareContentVideomShareContentVideo=(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;
}
}
privatebooleanisWebchatAvaliable(){
//检测手机上是否安装了微信
try{
getPackageManager().getPackageInfo("com.tencent.mm",PackageManager.GET_ACTIVITIES);
returntrue;
}catch(Exceptione){
returnfalse;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。