第一步:配置sdk
在build.gradle文件中,添加如下依赖即可:
在Android Studio中新建你的工程,并保证网络设置可以成功从jcenter下载微信SDK即可。

dependencies {    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'}

或者是以下

dependencies {    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'}

AndroidManifest.xml 设置

添加必要的权限支持:

第二步
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(isWeixinAvilible(mContext)) {                 }else {            Toast.makeText(mContext, "您还没有安装微信,请先安装微信客户端", Toast.LENGTH_SHORT).show();        }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;}}  /** * 判断 用户是否安装微信客户端 */public static boolean isWeixinAvilible(Context context) {    final PackageManager packageManager = context.getPackageManager();// 获取packagemanager    List pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息    if (pinfo != null) {        for (int i = 0; i < pinfo.size(); i++) {            String pn = pinfo.get(i).packageName;            if (pn.equals("com.tencent.mm")) {                return true;            }        }    }    return false;}}

如果后台返给我们的数据是二进制流图片我们需要做一些改动如下:
二进制流转换成Bitmap类型的

第一步:

 /**     * base64转为bitmap     * @return     */    public static Bitmap base64ToBitmap(String picStrInMsg) {        Bitmap bitmap = null;        byte[] decode = Base64.decode(picStrInMsg, Base64.DEFAULT);        bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);        return bitmap;    }

第二步:
在调用微信分享的方法里面

 Bitmap bitmap = base64ToBitmap(arg.split("base64,")[1]);            try {                WXImageObject imgObj = new WXImageObject(bitmap);                WXMediaMessage msg = new WXMediaMessage();                msg.mediaObject = imgObj;                Bitmap thumbBitmap = Bitmap.createScaledBitmap(bitmap, 150, 150, true);                bitmap.recycle();                msg.thumbData = Util.bmpToByteArray(thumbBitmap, true);  //设置缩略图                SendMessageToWX.Req req = new SendMessageToWX.Req();                req.transaction = buildTransaction("imgshareappdata");                req.message = msg;                req.scene = WechatShareManager.WECHAT_SHARE_TYPE_TALK;                mShareManager.mWXApi.sendReq(req);            } catch (ActivityNotFoundException e) {// TODO: handle exception                Toast.makeText(mContext, "检查到您手机没有安装微信,请安装后使用该功能", Toast.LENGTH_LONG).show();            }

《-----------到这里就结束了以下的以下都是遇见问题的解决办法,希望对自己有帮助对大家有帮助---------》
最后如果出现以下问题isWebchatAvaliable()检查微信不好用请换成以下:

最后如果出现以下问题

做微信分享功能,遇到这个问题,在网上也没找到答案。最后发现问题解决了,我出现这个问题的原因是: APP_ID 的 错误,APP_ID一般以 wx 开头的18个字节长度的字符串。也就是说你的微信ID不对。

更多相关文章

  1. android 状态栏、标题栏、屏幕高度
  2. Android获取内存的不同方法总结
  3. Android(安卓)- 动态设置自定义View的id - setId
  4. Android(安卓)获取全国城市列表类似于联系人排序(二)
  5. CardView兼容处理
  6. Android中proguard的作用
  7. Android解决设置(background)属性的时候图片会被拉伸问题
  8. Android(安卓)开发有用代码积累
  9. android 物理键盘布局

随机推荐

  1. Android中的多级联动
  2. 对Android中的Cursor一些浅显见解
  3. Android(安卓)framwork 分析之智能指针Li
  4. 配置整理——如何在Android(安卓)studio
  5. 将VitamioBundle工程作为Android(安卓)Li
  6. android 游戏:俄罗斯方块的小结和开发过程
  7. Serializable 都这么牛逼了,Parcelable 还
  8. Android接电话流程,JAVA部分
  9. 图片、缓存-Android仿人人客户端(v5.7.1)—
  10. 自定义view的基本步骤和思路...