前言

本文介绍的只是微信开发中的一个功能,分享。看到网上很多关于微信分享的博客、帖子,说实话,没几篇写的全的,很多都是复制粘贴,介绍的也不全,缺少代码的分析,关键性的代码总是漏一句两句,看着就很难受。所以,在这里我打算写一篇关于微信分享的博客,总结一下知识点,贴上详细的代码。学微信分享,这一篇就够了。

准备工作

1.微信开放平台申请应用,分享需要用到appId,这里注意了,申请时用到的是MD5值,而不是SHA1值(这里我就弄错过,导致分享一直都是失败,返回的状态码为-6)。不知道怎么在AS中得到签名信息的同学也不要紧,微信开放平台上有一个apk专门可以用来获取签名,这里附上链接点击前往。
2.在自定义的Application中的onCreate方法中,注册一下app,代码如下:

// 三个参数分别是上下文、应用的appId、是否检查签名(默认为false)
IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, "你的appId", true);
// 注册
mWxApi.registerApp("你的appId");

3.微信分享是肯定需要请求网络的,所以要在manifests文件中允许网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

4.在app模块的build.gradle文件中,添加如下依赖:

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

或者

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

这两个依赖乍一看是一样的,区别在于,第一个是with,第二个是without。其中,第一个依赖包含统计功能。说实话,我也没用过它的统计功能,但是我一般都是依赖第一个,说不定什么时候就需要用到了呢。依赖好后,同步一下。

开始使用

微信分享,可以是纯文本类型、图片类型、音乐类型、视频类型、网页类型、小程序类型。这么多类型如何实现,微信开放平台上有完整的代码实现,只是少了一个参数,看过的同学就知道啦,老样子,还是附上链接点击前往。我的项目中用到的是网页类型,所以我下面贴出的也是分享网页类型的代码,如果需要用到别的类型的,去我上面的链接里看一下就清晰了,其实代码本质都是一样的,只是个别参数变了一下。我把请求的代码写到了一个工具类里,方便调用,下面附上代码:

public class WxShareUtils {/*** 分享网页类型至微信** @param context 上下文* @param appId   微信的appId* @param webUrl  网页的url* @param title   网页标题* @param content 网页描述* @param bitmap  位图*/public static void shareWeb(Context context, String appId, String webUrl, String title, String content, Bitmap bitmap) {// 通过appId得到IWXAPI这个对象IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);// 检查手机或者模拟器是否安装了微信if (!wxapi.isWXAppInstalled()) {ToastUtil.makeText("您还没有安装微信");return;}// 初始化一个WXWebpageObject对象WXWebpageObject webpageObject = new WXWebpageObject();// 填写网页的urlwebpageObject.webpageUrl = webUrl;// 用WXWebpageObject对象初始化一个WXMediaMessage对象WXMediaMessage msg = new WXMediaMessage(webpageObject);// 填写网页标题、描述、位图msg.title = title;msg.description = content;// 如果没有位图,可以传null,会显示默认的图片msg.setThumbImage(bitmap);// 构造一个ReqSendMessageToWX.Req req = new SendMessageToWX.Req();// transaction用于唯一标识一个请求(可自定义)req.transaction = "webpage";// 上文的WXMediaMessage对象req.message = msg;// SendMessageToWX.Req.WXSceneSession是分享到好友会话// SendMessageToWX.Req.WXSceneTimeline是分享到朋友圈req.scene = SendMessageToWX.Req.WXSceneSession;// 向微信发送请求wxapi.sendReq(req);}
}

工具类写好了,最后只要在你需要的地方调用就行了。这里补充一下,得到本地的bitmap很简单,只要通过工厂类就能实现,如果是网络图片呢?不知道的继续往下看,我这里使用了Glide这个控件。这个控件有多NB,不需要我在这里展开说明了吧。Glide有个方法可以直接异步获取网络图片的位图(我这里使用的是4.0.0版本,别的版本大家可以去Github查看,看有没有变化),老样子,贴上代码:

Glide.with(this).asBitmap().load("图片url").into(new SimpleTarget<Bitmap>() {/*** 成功的回调*/@Overridepublic void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {// 下面这句代码是一个过度dialog,因为是获取网络图片,需要等待时间mDialog.dismiss();// 调用方法WxShareUtils.shareWeb(this, "你的appId","网页url", "网页标题", "网页描述",bitmap);}/*** 失败的回调*/@Overridepublic void onLoadFailed(@Nullable Drawable errorDrawable) {super.onLoadFailed(errorDrawable);mDialog.dismiss();WxShareUtils.shareWeb(this, "你的appId","网页url", "网页标题", "网页描述",null);}
});

这里还是需要补充一下,图片大小超过32KB(我记得没错应该是这个值),会导致分享界面调不起来,这里就需要压缩一下图片了,压缩图片的代码大家去网上找一下吧,以前我写过,但是暂时找不到了,怕网上随便找的有问题,误导大家,大家就辛苦一下自己找找吧,还是有很多的,基本没啥大问题。

收尾工作

在app模块包的根目录下新建一个wxapi的包,在这个包下面新建一个WXEntryActivity,这两步缺一不可,而且名字也要一模一样,不要问我为什么,微信规定的。

这个WXEntryActivity就是个普通的Activity,先贴上布局,其实就是一个最简单的空布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.constraint.ConstraintLayout>

下面就是这个Activity的代码:

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {private IWXAPI wxapi;@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);wxapi.handleIntent(intent, this);}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wxentry);wxapi = WXAPIFactory.createWXAPI(this, "你的appId");wxapi.handleIntent(getIntent(), this);}/*** 微信发送请求到第三方应用时,会回调到该方法*/@Overridepublic void onReq(BaseReq baseReq) {// 这里不作深究}/*** 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法* app发送消息给微信,处理返回消息的回调*/@Overridepublic void onResp(BaseResp baseResp) {switch (baseResp.errCode) {// 正确返回case BaseResp.ErrCode.ERR_OK:switch (baseResp.getType()) {// ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX是微信分享,api自带case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:// 只是做了简单的finish操作finish();break;default:break;}break;default:// 错误返回switch (baseResp.getType()) {// 微信分享case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:Log.i("WXEntryActivity" , ">>>errCode = " + baseResp.errCode);finish();break;default:break;}break;}}
}

这样还没完,最后需要在manifests文件中申明这个Activity,代码如下(复制粘贴的话,把代码中的注释去掉就可以了):

<activity// 下面三行代码必须要有android:name=".wxapi.WXEntryActivity"android:exported="true"android:launchMode="singleTop"// 下面两行代码可有可无android:screenOrientation="portrait"// 指定一个主题,这里是无标题、半透明的主题android:theme="@style/NoTitleTranslucent80Theme"/>

下面是指定主题的代码,写在style.xml文件里(windowAnimationStyle可以不添加,这里只是一个动画):

<style name="NoTitleTranslucent80Theme" parent="BaseAppTheme"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">#80000000</item><item name="android:windowIsTranslucent">true</item><item name="android:windowAnimationStyle">@style/AlphaAnim</item>
</style>

下面是动画的style(代码中两个item从上至下分别是进入动画、退出动画):

<style name="AlphaAnim" parent="android:Animation"><item name="@android:windowEnterAnimation">@anim/bottom_in</item><item name="@android:windowExitAnimation">@anim/bottom_out</item>
</style>

bottom_in 的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
        android:duration="300"android:fromXDelta="0"android:fromYDelta="100%"android:toXDelta="0"android:toYDelta="0" />
</set>

bottom_out 的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
        android:duration="300"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="0"android:toYDelta="100%" />
</set>

至此,一个完整的微信分享功能就实现了。

总结

只要按照上面的步骤一步步来,基本就能实现微信分享功能了。其中,要注意一点,
分享的图片大小不能大于32KB
分享的图片大小不能大于32KB
分享的图片大小不能大于32KB
最好自己写个压缩的方法。

Android微信分享功能集成开发指南(这一篇就够了)相关推荐

  1. 微信分享功能android,Android微信分享功能实例+demo

    Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留 ...

  2. 一分钟让你实现Android微信分享功能

    Android实现微信分享功能(手把手教你实现,让你迅速完成产品经理分配的任务) 1,应公司业务需求需要给APP加一个微信分享功能,首先去微信开放平台注册一下点击进入获取APPID,话不多说直接上代码 ...

  3. android 微信分享 源码,记录Android微信分享功能的吐槽与思考

    在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: /** * 微信分享:分享网页 * @param context * ...

  4. 友推app微信分享功能集成攻略

    一:已实现功能 1.支持微信,QQ,新浪微博,QQ空间,短信,邮件等多家大型社交媒体平台一键分享 2.支持积分抽奖活动在线活动创建,通过分享应用邀请好友拿积分 3.支持截屏涂鸦个性分享 4.集成简单, ...

  5. android微信分享工具,记录Android微信分享功能的吐槽与思考

    在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: /** * 微信分享:分享网页 * @param context * ...

  6. Android微信h5分享,H5网页实现微信分享功能

    H5网页实现微信分享功能 一,首先在公众号管理后台"公众号设置"的"功能设置"里填写JS接口安全域名,域名需要通过ICP备案,没有备案域名可以用SAE.BAE等 ...

  7. centos + nodejs + egg2.x 开发微信分享功能

    前言 近期把自用的微信公众号微信分享模块从 php 修改为 nodejs 的版本,虽然这是一个很小的功能,但仍然选择了 egg 框架,也算是为未来继续开发公众号,做点扩展的准备. 本文章仅为项目介绍, ...

  8. vue 如何调用微信分享_Vue开发 添加微信分享功能(全局分享)

    在Vue4.0开发微信公众号的时候,需要做微信分享功能.这个功能其实还算简单,具体的思路如下: 1.安装微信JSSDK和Axios(axios是http请求插件) 2.向后台请求微信配置参数 3.初始 ...

  9. Android 微信分享与QQ分享功能(原生实现)

    微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...

最新文章

  1. mysql教程多表查询_mysql重点,表查询操作和多表查询
  2. PaddleOCR转ONNX
  3. u-boot的mkconfig文件详解
  4. 如何用 Linq 进行多重 Orderby ?
  5. 数据安全架构设计与实战~如何加密结构化数据
  6. 学习Java之前先学C语言
  7. mybatis SqlMapConfig.xml typeAliases
  8. 流水线的几个指标总结
  9. 尚硅谷大数据课程flink1.13代码实现与笔记记录
  10. meta分析一般步骤
  11. 小米线刷工具 MiFlash 提示长度不能小于 0 参数名 length,无法读取设备解决方法
  12. 清华紫光输入法linux,清华紫光拼音输入法
  13. python生成exe文件
  14. 2018年的最后一周,说些心里话
  15. Python 视频制作神器 -- Manim入门篇
  16. 在Pycharm中输入中文显示为繁体的解决办法
  17. SD NAND flash使用说明
  18. ikbc键盘解锁上锁 解决win键失灵的问题
  19. Qt打包成setup.exe安装包
  20. Java实现三人年龄

热门文章

  1. 应急广播项目测试总结
  2. 配置全面升级!骨传导耳机南卡Pro 4新发布!
  3. cesium矩阵和方位角heading ,pitch, roll的相互转换
  4. 提供完善的类似于Outlook 2003 Calendar的风格日历日程控件Xtreme Calendar
  5. 如何用FMEA方法排除架构隐患
  6. (转)图森技术汇 | 聊聊Anchor的前世今生(下)
  7. 基于JAVA二手儿童闲置物品交易平台计算机毕业设计源码+系统+lw文档+部署
  8. 现象级火爆的《王者荣耀》,究竟是被谁打败的?
  9. 2023四川安全员(B证)模拟
  10. java web程序示例_示例Web应用程序提示列表