在android开发中微信分享功能还是经常用到的,比如把文字,图片,网页类型,小程序类型的文件等分享给微信好友,朋友圈等。官方文档 那么接下来就来说说如何去实现吧

一.添加依赖

   implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

二. 写一个分享的页面(popup_share.xml)

这个是个popupWindow弹窗来着

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="@drawable/content_corner"android:paddingTop="10dp"android:paddingBottom="15dp"><TextViewandroid:text="分享到"android:gravity="center"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_marginTop="10dp"android:layout_marginBottom="25dp"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/bottom_share_wechat"android:gravity="center"android:orientation="vertical"android:layout_weight="1.0"android:layout_width="wrap_content"android:layout_height="wrap_content"><com.example.chunjiafu.custom.ImageRoundandroid:src="@drawable/wechat"android:scaleType="centerCrop"android:layout_width="50dp"android:layout_height="50dp"/><TextViewandroid:text="微信好友"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/bottom_share_wxcircle"android:gravity="center"android:orientation="vertical"android:layout_weight="1.0"android:layout_width="wrap_content"android:layout_height="wrap_content"><com.example.chunjiafu.custom.ImageRoundandroid:src="@drawable/wechat_momemts"android:scaleType="centerCrop"android:layout_width="50dp"android:layout_height="50dp"/><TextViewandroid:text="朋友圈"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/bottom_share_qq"android:gravity="center"android:orientation="vertical"android:layout_weight="1.0"android:layout_width="wrap_content"android:layout_height="wrap_content"><com.example.chunjiafu.custom.ImageRoundandroid:src="@drawable/qq"android:scaleType="centerCrop"android:layout_width="50dp"android:layout_height="50dp"/><TextViewandroid:text="QQ好友"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/bottom_share_qzone"android:gravity="center"android:orientation="vertical"android:layout_weight="1.0"android:layout_width="wrap_content"android:layout_height="wrap_content"><com.example.chunjiafu.custom.ImageRoundandroid:src="@drawable/qq_qzone"android:scaleType="centerCrop"android:layout_width="50dp"android:layout_height="50dp"/><TextViewandroid:text="QQ空间"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/bottom_share_sina"android:gravity="center"android:orientation="vertical"android:layout_weight="1.0"android:layout_width="wrap_content"android:layout_height="wrap_content"><com.example.chunjiafu.custom.ImageRoundandroid:src="@drawable/webo"android:scaleType="centerCrop"android:layout_width="50dp"android:layout_height="50dp"/><TextViewandroid:text="微博"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout></LinearLayout><TextViewandroid:id="@+id/share_cancel"android:text="取消"android:textColor="@color/theme_defaultText"android:textSize="@dimen/order2"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"/>
</LinearLayout>

三. 自定义一个类WeChatShareUtils(微信分享工具类)

这里写有文本,图片,网页,小程序等类型的分享,需要直接用就可以了

// todo 微信分享工具类
public class WeChatShareUtils {//    private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001; // 微信4.2以上支持private static final int TIMELINE_SUPPORTED_VERSION = 0x27000D00;  // 判断微信版本是否为7.0.13及以上private static final String id = "xxxxxx"; //小程序原始idprivate static final String pageUrl = "xxxxxx"; //兼容低版本的网页链接//IWXAPI是第三方app和微信通信的openapi接口private IWXAPI api;private Context context;public static WeChatShareUtils weChatShareUtils;public static WeChatShareUtils getInstance(Context context){if(weChatShareUtils ==null){weChatShareUtils = new WeChatShareUtils();}if(weChatShareUtils.api !=null){weChatShareUtils.api.unregisterApp();;}weChatShareUtils.context = context;weChatShareUtils.regToWx();return weChatShareUtils;}// todo 注册应用id到微信private void regToWx(){//通过WXAPIFactory工厂,获取IWXAPI的实例api = WXAPIFactory.createWXAPI(context, Config.APPID,true);//将应用的appId注册到微信api.registerApp(Config.APPID);}/***todo 分享文字到朋友圈或者好友* @param text 文本内容* @param scene 分享方式:好友还是朋友圈* @return*/public boolean shareText(String text,int scene){//初始化一个WXTextObject对象,填写分享的文本对象WXTextObject textObject = new WXTextObject();textObject.text = text;return share(textObject,text,scene);}/*** todo 分享图片到朋友圈或者好友* @param bmp  图片的Bitmap对象* @param scene 分享方式:好友 WXSceneSession 还是朋友圈 WXSceneTimeline,收藏 WXSceneFavorite* @return*/public boolean sharePic(Bitmap bmp, int scene){//初始化一个WXImageObject对象WXImageObject imageObject = new WXImageObject();//设置缩略图Bitmap thump = Bitmap.createScaledBitmap(bmp,300,300,true);bmp.recycle();return share(imageObject,thump,scene);}/*** todo 分享网页到朋友圈或者好友,视频和音乐的分享和网页大同小异,只是创建的对象不同。* @param url 网页的url* @param title 显示分享网页的标题* @param thumb 图片的缩略图* @param description 对网页的描述* @param scene 分享方式:好友还是朋友圈* @return*/public boolean shareUrl(String url, String title, Bitmap thumb, String description, int scene) {//初试话一个WXWebpageObject对象,填写urlWXWebpageObject webPage = new WXWebpageObject();webPage.webpageUrl = url;//设置缩略图Bitmap tmb = Bitmap.createScaledBitmap(thumb,150,150,true);thumb.recycle();return share(webPage, title, tmb, description, scene);}/*** todo 分享小程序类型* @param url* @param title* @param thumb* @param description* @param scene 只支持分享给微信好友* @return*/public boolean shareMiniProgram(String url, String title, Bitmap thumb, String description, int scene) {//初试话一个WXMiniProgramObject对象,填写urlWXMiniProgramObject wxMiniProgramObject = new WXMiniProgramObject();wxMiniProgramObject.webpageUrl = pageUrl; //兼容低版本的网页链接wxMiniProgramObject.miniprogramType = WXMiniProgramObject.MINIPROGRAM_TYPE_TEST; //小程序类型,测试版wxMiniProgramObject.userName = id;  //小程序原始idwxMiniProgramObject.path = url; //小程序的path//设置缩略图Bitmap tmb = Bitmap.createScaledBitmap(thumb,300,300,true);thumb.recycle();return share(wxMiniProgramObject, title, tmb, description, scene);}private boolean share(WXMediaMessage.IMediaObject mediaObject, Bitmap thumb, int scene) {return share(mediaObject, null, thumb, null, scene);}private boolean share(WXMediaMessage.IMediaObject mediaObject, String description, int scene) {return share(mediaObject, null, null, description, scene);}private boolean share(WXMediaMessage.IMediaObject mediaObject,String title,Bitmap thumb,String description, int scene){WXMediaMessage msg = new WXMediaMessage(mediaObject);if(title !=null){msg.title = title;}if(description !=null){msg.description = description;}if(thumb !=null){msg.thumbData = bmpToByteArray(thumb, true);}//构造一个ReqSendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = msg;req.scene = scene;return api.sendReq(req);}//判断是否支持转发到朋友圈//微信4.2以上支持,如果需要检查微信版本支持API的情况, 可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈//微信版本:当且仅当通过 IWXAPI.getWXAppSupportAPI() 接口获取到的值 >= 0x27000D00(7.0.13以上),才能支持FileProvider的方式进行分享。public boolean isSupportWX(){int wxSdkVersion = api.getWXAppSupportAPI();return wxSdkVersion >= TIMELINE_SUPPORTED_VERSION;}// todo Bitmap转换为 byte数组private byte[] bmpToByteArray(final Bitmap bmp,final boolean needRecycle){int i;int j;if (bmp.getHeight() > bmp.getWidth()) {i = bmp.getWidth();j = bmp.getWidth();}  else {i = bmp.getHeight();j = bmp.getHeight();}Bitmap localBitmap = Bitmap.createBitmap(i, j, Bitmap.Config.RGB_565);Canvas localCanvas =  new Canvas(localBitmap);while ( true) {localCanvas.drawBitmap(bmp,  new Rect(0, 0, i, j),  new Rect(0, 0,i, j),  null);if (needRecycle)bmp.recycle();ByteArrayOutputStream localByteArrayOutputStream =  new ByteArrayOutputStream();localBitmap.compress(Bitmap.CompressFormat.JPEG, 100,localByteArrayOutputStream);localBitmap.recycle();byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();try {localByteArrayOutputStream.close();return arrayOfByte;}  catch (Exception e) {// F.out(e);}i = bmp.getHeight();j = bmp.getHeight();}}
}

四. 新建WXEntryActivity(分享回调)

注意,一定是放在wxapi下面的,且一定是要WXEntryActivity这个类名,错一个字都不行

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI api;@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setStatusBarColor(Color.parseColor("#000000"));api = WXAPIFactory.createWXAPI(getApplicationContext(), Config.APPID, true);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(getIntent(), this);WXEntryActivity.this.finish();}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp resp) {if(resp.getType() == ConstantsAPI.COMMAND_SENDAUTH){//微信登录}else if(resp.getType() == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){//微信分享String result = "";switch (resp.errCode){case BaseResp.ErrCode.ERR_OK:result = "分享成功";break;default:result = "分享失败";break;}ToolUtils.midToast(getApplicationContext(),result,1000);}WXEntryActivity.this.finish();}
}

五. 使用

 @Overridepublic void onClick(View v) {Intent intent;switch (v.getId()){case R.id.bottom_share_wechat: //微信分享sharePopupWindow.dismiss();fun_handleShare(SendMessageToWX.Req.WXSceneSession);break;case R.id.bottom_share_wxcircle: //朋友圈sharePopupWindow.dismiss();        fun_handleShare1(SendMessageToWX.Req.WXSceneTimeline);break;case R.id.bottom_share_qq: //qqToast.makeText(getApplicationContext(),"抱歉亲,暂时不支持转发给QQ好友",Toast.LENGTH_SHORT).show();break;case R.id.bottom_share_qzone: //qq空间Toast.makeText(getApplicationContext(),"抱歉亲,暂时不支持转发至QQ空间",Toast.LENGTH_SHORT).show();break;case R.id.bottom_share_sina: //微博Toast.makeText(getApplicationContext(),"抱歉亲,暂时不支持转发至微博",Toast.LENGTH_SHORT).show();break;}// todo fun_handleShare 分享小程序类型 (只支持分享给微信好友)private void fun_handleShare(int scene){if(weChatShareUtils.isSupportWX()){String desc = "我在xxxx发现了一个不错的商品,赶快来看看吧。";String title = "男士休闲裤";String url = "/pages/media?xx=12";Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.logo_good);weChatShareUtils.shareMiniProgram(url,title,bitmap,desc,scene);}else{ToolUtils.midToast(getApplicationContext(),"手机上微信版本不支持分享功能",1000);}}// todo 分享网页类型private void fun_handleShare1(int scene){if(weChatShareUtils.isSupportWX()){String desc = "我在发现了xxx一个不错的商品,赶快来看看吧。";String title = "男士休闲裤";String url = "http://www.baidu.com";Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.logo_good);weChatShareUtils.shareUrl(url,title,bitmap,desc,scene);}else{ToolUtils.midToast(getApplicationContext(),"手机上微信版本不支持分享功能",1000);}}

按上面的方法已经如果不出意外,是正常分享出去了。
但是,有没发现,我上面分享出去的是个本地图片,且缩略图官方仅支持加载本地的bitmap。

那么问题就来,如果我的是张网络图片(从后台取回来的图片url)那要怎么办呢?

办法自然是有的,就是把这个网络图片下载到本地保存成bitmap不就可以了么,太调皮了哈哈哈哈哈哈。
如何把网络图片下载到本地并保存成bitmap呢,请移步【另一篇》网络图片转化为bitmap】

Android中实现微信分享的功能相关推荐

  1. vue单应用在ios系统中实现微信分享功能

    表示是第一次使用vue做单应用显目,也是在逐渐的摸索中~更是各种踩坑,各种填坑,打算写博客么?是因为不想写笔记了,嗯嗯 就是这么简单 进入正题. 刚开始做微信分享的这个功能的时候,脑补了官方文档微信J ...

  2. android开发微信分享功能,Android编程实现微信分享信息的方法

    本文实例讲述了Android编程实现微信分享信息的方法.分享给大家供大家参考,具体如下: 随着微信越来越火,越来越多的应用要求有分享到微信的功能.虽然有很多平台都帮集成有分享功能,比如友盟.但是个人觉 ...

  3. android快速集成微信分享支付

    前言 最近公司的项目中有又又又又微信分享和支付的功能,每次我都会重新集成,为了方便以后的开发,以及方便各位同仁的开发,整合了这次开发的一些点滴,方便亲们快速集成微信分享和支付. 参考文档 –1.微信官 ...

  4. 微信记录 android id,记录微信分享的一些坑

    在帮别的项目干活时遇到了要做微信分享的功能,当时觉得这不就是小case(因为之前都写过),可能是由于那边项目的人不太懂吧,居然没有提前去申请微信app_id,没关系,反正写过,打开之前的项目,复制粘贴 ...

  5. android添加图片按钮,如何给Android中的按钮添加图片功能

    在layout中建一个my_login.xml文件 代码如下 android:layout_width="fill_parent" android:layout_height=&q ...

  6. 在H5页面中禁止微信分享转发按钮-mugeda

    在H5页面中禁止微信分享转发按钮(mugeda) 在页面脚本中插入以下代码 方法一: 加一段js代码 document.addEventListener('WeixinJSBridgeReady', ...

  7. 在H5页面中禁止微信分享转发按钮

    在H5页面中禁止微信分享转发按钮(mugeda) 在页面脚本中插入以下代码 方法一: 加一段js代码 document.addEventListener('WeixinJSBridgeReady', ...

  8. android sdk引入 微信分享_Android 微信SDK分享功能中的最全过程步骤分析

    在前面有一章已经分析过怎么用官方的demo分享微信信息了,在这里我就不再多说,其中关于在自己应用分享说得很简单,本文作者也是经过一番折腾才弄成功,为了以后让大家都少走弯路,决定在这里从头到尾介绍怎么在 ...

  9. App中 微信分享 代付功能 业务设计 与 代码实现

    先上图 场景 本例的代付场景是,开发一款APP应用,APP中具有支付能力,按照微信 支付对接要求已经完成APP支付的对接.现在要玩点新花样,找人代付订 单.用户在APP中下单后选择找人代付,将分享H5 ...

  10. Android中实现一键分享功能

    在Android中开发中,我们会经常遇到使用一键分享的功能,今天我以使用第三方平台ShareSDK来实现一键分享向大家分享下具体的流程. 下面,我就以步骤顺序依次展示在自己的Android项目中如何实 ...

最新文章

  1. Python-EEG工具库MNE中文教程(12)-注释连续数据
  2. python安装、anaconda安装、pycharm安装(学习笔记,自己重新整理后的内容,最新版本工具安装)
  3. 中反应器体积_实验室规模半连续和连续生物反应器在微生物学和生物技术工艺中的作用...
  4. 【Linux网络编程学习】I/O多路复用——epoll
  5. 【速来抢】iPhone12、STM32开发板、1024元现金红包…打包免费送!!!
  6. python读取数据库导出文件_python如何导出excel表格数据库数据
  7. 分布式数据库clickhouse、tidb、palo对比
  8. linux 分区 LVM 挂载
  9. 3.4 Zend_Db_Table_Row
  10. 关于IplImage的widthstep
  11. BZOJ2794/POI2012 Cloakroom
  12. H3C防火墙-安全域配置举例
  13. (郭霖)Android图片加载框架最全解析(一),Glide的基本用法
  14. 数据集的文字标签(label)转成数字标签
  15. SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)
  16. 思维工具1: SCAMPER
  17. 为什么CMOS门电路在传输过程存在延时
  18. [hive]hive加载本地数据,然后删除了本地数据也删除了表,这时可以在hdfs垃圾箱找到
  19. 明日之后辐射高校145层怎么过 辐射高校145层攻略
  20. week3-day7 某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

热门文章

  1. iphone11返回上一级手势怎么设置_iPhone 11 系列手势操作大全你了解吗?
  2. 视频教程-Java IO流精讲下-Java
  3. python定时任务启动与停止_python定时任务最强框架APScheduler详细教程
  4. QQ昵称字段 特殊字符的数据库存储
  5. [POI2012] 约会 Rendezvous
  6. 氩弧焊机的电气图_氩弧焊机的工作原理以及接线图
  7. matlab 菱形符号,matlab 图形符号
  8. linux 小企鹅输入法,Linux(FC) 小企鹅输入法的安装
  9. 为什么微博超话显示服务器有点累,微博超话帖子被吞是什么原因?使用时,注意这些事项...
  10. 基于asp.net725原创(古代)文学交流网站系统