继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

实现基于微信SDK的微信多功能分享实例(二):微信分享机制

Haion
关注TA
已关注
手记 15
粉丝 24
获赞 198

上一篇手记介绍了一些关于微信应用申请,SDK的导入,以及项目环境搭建的注意事项,从这篇手记开始,将是真正的开始学习微信分享的知识了。

从微信开放平台的关于微信分享与收藏的开发者文档中看到,微信分享支持五种类型的内容分享,包括:

文字,图片,音乐,视频,网页

支持将该内容分享到微信的三种场景中,包括:

微信好友会话,朋友圈,添加到微信收藏

图片描述

在这里写一些我对微信分享机制的一些小总结,上图是微信分享的一个流程,

1.对于支持分享的五种类型,SDK中分别提供了五个类WXTextObject,WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject,用于封装我们要分享的内容。
2.之后要用WXMediaMessage来进行进一步的封装,将上述五种类的对象赋值给该对象的mediaObject变量,这里还有一个重要的变量description,用于整个message的描述,必须要为它赋值,否则分享会失败(之后会介绍具体情况)
3.将封装好的WXMediaMessage作为参数传给 Req的message变量,同时指定Req的scene属性,包括WXSceneSession(好友),WXSceneTimeline(朋友圈),WXSceneFavorite(我的收藏),我们可以看到在Req的类里就将五种类型与三种场景联系在一起了。
4.最后由IWXPAI 调用sendReq(),参数为Req对象,将我们的第三方app与微信进行关联

之前我已经创建好了一个项目,完成了所有的准备工作,在这篇手记中针对文字分享进行代码编写,测试其实际的效果。在下一篇手记中会介绍其他的四种类型。
定义一个按钮,点击按钮进行分享

定义一个按钮,点击按钮进行分享

为了方便,我在这里就固定文字进行分享,代码如下:

private String text = "这是一条正正经经的微信文字分享";
private String []single_list = {"微信好友","朋友圈","我的收藏"};
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {       
    @Override
    public void onClick(View arg0) {
        //弹出单选对话框,选择分享的场景
        AlertDialog.Builder builder = new Builder(MainActivity.this);           
        builder.setSingleChoiceItems(single_list, 0, new DialogInterface.OnClickListener() {        
            @Override
            public void onClick(DialogInterface arg0, int which) {
                //初始化WXTextObject的对象,将要分享的文字直接作为构造函数的参数
                WXTextObject textObj = new WXTextObject(text);
                //用WXTextObject对象初始化WXMediaMessage对象,实现再封装
                WXMediaMessage msg = new WXMediaMessage();
                msg.mediaObject = textObj;
                //description是这个消息展示的一个描述
                msg.description = "分享文字";
                //构造一个Req
                SendMessageToWX.Req req = new Req();
                req.message = msg;
                //transaction作为一个请求的唯一标识,必须进行赋值
                req.transaction = "text";
                //根据单选对话框的选择来设置req.scene
                switch (which) {
                case 0:
                    req.scene = Req.WXSceneSession;
                    break;
                case 1:
                    req.scene = Req.WXSceneTimeline;
                    break;
                case 2:
                    req.scene = Req.WXSceneFavorite;
                    break;
                }
                //调用api接口将数据发送给微信
                api.sendReq(req);
            }
        });
        builder.setNegativeButton("完成", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int arg1) {
                dialog.dismiss();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
});

接下来看一下实际运行的效果:

分享给微信好友

图片描述
图片描述
图片描述
图片描述

分享到朋友圈

图片描述
图片描述

添加到收藏

图片描述
图片描述

从发送给好友和收藏中可以看到,在跳转到微信后,会弹出对话框上面有WXMediaMessage,显示他的description,如果不给它赋值,该对话框无法弹出,分享会失败。

未完待续……

打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP

热门评论

我想问一下,为什么我按照你的步骤但是还是不能实现呢?

//我在mainactivity里面写了
public static final String APP_ID="wx43eb4db48704e8e6";
private IWXAPI api;
    public ImageButton imshare;
    private String Text="我正在玩猜歌小游戏,快来加入我吧!";
//在oncreatelimian 写了:
imshare=(ImageButton) findViewById(R.id.btn_share);
//初始化API
api=WXAPIFactory.createWXAPI(this,APP_ID);
api.registerApp(APP_ID);
//imshare的点击事件,分享特定文本
imshare.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// WXTextObject对象,将想要分享的文本直接做构造函数中的参数
WXTextObject text0bj=new WXTextObject(Text);
//用WXTextObject对象初始化WXMediaMessage对象,实现再封装
WXMediaMessage msg=new WXMediaMessage();
msg.mediaObject=text0bj;
//description是这个消息表示的一个描述
msg.description="分享内容";
//构造Req
SendMessageToWX.Req req=new Req();
req.message=msg;
//trsaction作为一个请求的标识符,必须赋值
req.transaction="Text";
//分享朋友圈
req.scene=Req.WXSceneTimeline;
api.sendReq(req);
}
});


求回复啊,大神!!!!!!!!!!!!!!!!!

查看全部评论