Android中实现微信分享的功能

article/2025/10/15 4:31:39

在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】


http://chatgpt.dhexx.cn/article/sUOLJXdV.shtml

相关文章

H5链接分享到微信

在开发中最长遇到的一个需求就是微信分享&#xff0c;那么怎么实现呢&#xff0c;我使用uni-app写的 首先需要一个引导分享的图片 <view v-show"yd" class"boxContent" click"getclose(text)"><image class"yd" src"/s…

微信小程序学习 onShareAppMessage转发分享

最近在做仿抽奖助手小程序&#xff0c;遇上分享的一个问题。抽奖助手分享出来的商品缩略图很清晰且格式更好&#xff0c;而我们分享出来的是页面的默认截图&#xff0c;感觉不好看。其实它这个地方用的是图片&#xff0c;增加一个imageUrl即可。 onShareAppMessage(options) 在…

H5微信分享、自定义微信分享

在一个h5页面添加微信&#xff0c;分享给微信好友、朋友圈、腾讯微博 下面来实现 。 需要&#xff1a; 1、需要一个企业版的微信公众号&#xff08;认证过的&#xff09; 2、一台服务器 企业版的微信公众号原因&#xff1a; 在微信公众平台的接口权限内可以看到&#xff…

使用shareSDK实现微信多图分享到朋友圈Url分享到朋友圈URL分享到好友 问题记录

问题概述 其实第三方分享很早就有了&#xff0c;这个按理说这个应该没什么难度&#xff0c;为啥记录一下呢&#xff0c;因为项目中同时出现了 朋友圈多图分享&#xff08;多张URL集合&#xff09;&#xff0c;朋友圈URL分享&#xff0c;群和个人URL&#xff0c;图片分享。基本…

iOS ShareSDK实现分享——微信分享

最近领导让添加ios 微信分享视频的功能&#xff0c;之前做的只有微信分享本地图片的功能。 查看官网并没有找到答案&#xff0c;后来在其官网论坛中http://bbs.mob.com/thread-20938-1-1.html 这里面发现新版的sdk&#xff08;v3.2.1&#xff09;中才添加的微信分享本地文件&a…

微信分享功能

最近在做手机端页面&#xff0c;需要一个分享功能&#xff0c;其实自身分享是可以的&#xff0c;但是为了分享出的内容丰富&#xff0c;比如缩略图了&#xff0c;描述了等等&#xff0c;如下图所示&#xff1a; 步骤一&#xff1a;绑定域名 先登录微信公众平台进入“公众号…

Android app分享文件到微信

两种实现方案&#xff1a; 1.使用WXFileObject构造分享方法发送到微信&#xff1b; 2.调用系统分享方法&#xff0c;把文件直接发送到微信&#xff1b; 那么下面来分别看看怎么实现&#xff1a; 〇、准备工作 首先&#xff0c;需要在AndroidManifest.xml中配置FileProvider信…

ShareSDK关于微信分享问题

转自&#xff1a;http://www.eoeandroid.com/thread-310281-1-1.html 发现用sharesdk&#xff0c;做其他平台分享很快&#xff1b;如新浪微博、腾讯微博、有道云笔记、开心网、Google等等&#xff0c;几句代码就搞定&#xff1b; 但是微信有点麻烦&#xff0c;下面我把…

uniapp实现录音喊话功能

直接先上代码&#xff1a; const recorderManager uni.getRecorderManager() onShow() {this.test()},methods: {test() {uni.getSetting({success: (res) > {console.log(res.authSetting, res.authSetting[scope.record]);if (res.authSetting[scope.record] false) {…

h5调用android录音,html5网页录音插件Recorder

插件描述&#xff1a;html5 js 录音 mp3 wav ogg webm amr 格式&#xff0c;支持pc和Android、ios部分浏览器、和Hybrid App(提供Android IOS App源码)&#xff0c;微信也是支持的&#xff0c;提供H5版语音通话聊天示例 Recorder用于html5录音 支持大部分已实现getUserMedia的移…

利用RecordRTC.js实现H5录音功能

前言&#xff1a; 最近遇到 要语音转文字 的需求&#xff0c;语音转文字肯定要先搞定录音功能&#xff0c;在网上找了好久没找到具体的 RecordRTC.js 插件的使用方法&#xff0c;最后只能对着 github 上开源代码小试了一下&#xff0c;录音功能好使所以就记录一下叭 一、Reco…

vue录音+js-audio-recorder

小小记录一下项目中用到的录音功能 1.下载插件 npm i js-audio-recorder 2.展示代码 <template><div style"padding: 20px;"><div style"font-size:14px"><h3>录音时长&#xff1a;{{ recorder && recorder.duration.…

html 苹果微信录音js,微信js-sdk 录音功能的示例代码

需求描述 制作一个H5页面&#xff0c;打开之后可以录音&#xff0c;并将录音文件提交至后台 微信录音最长时长为1min 代码如下 // isVoice&#xff1a; 0-未录音 1-录音中 2-录完音 // 点击录音/录音中 按钮展示 点击录音 // isListen // 0-未试听/试听结束 1-试听中 2-暂停试听…

已解决:H5移动端网页实现录音功能,js实现录音功能,包括安卓webview接口也可以使用

遇到一个需求&#xff0c;需要做一个手机网页录音的功能&#xff0c;嵌入到webview中去&#xff0c;用安卓原生录音倒是可以&#xff0c;但是想着尽量去安卓化开发&#xff0c;就想着用纯的js前端代码去实现录音功能。 在 Web 应用程序中&#xff0c;JavaScript 是运行在浏览器…

网页录音时的麦克风权限问题解决

来源 | https://www.html.cn/web/html/19184.html 在我们进行网页制作时可能会遇到需要录音的情况&#xff0c;而在进行网页录音时又有可能会遇到麦克风权限问题导致无法录音&#xff0c;本文就来为大家介绍一下如何解决麦克风权限问题。 在本地中打开的时候&#xff0c;谷歌、…

获取摄像头和麦克风权限_js获取浏览器摄像头和麦克风权限

前言 项目中会使用到摄像头或麦克风设备&#xff0c;这就需要我们获取浏览器的摄像头和麦克风权限&#xff0c;权限是无法通过js操控的&#xff0c;必须由浏览器用户设置。 下面我来告诉大家如何获取浏览器的摄像头或麦克风的权限&#xff0c;使浏览器弹出询问窗口。 一、我们想…

(前端)录音功能实现 js-audio-recorder

1. 创建 import Recorder from js-audio-recorder const parameter {sampleBits: 16, // 采样位数&#xff0c;支持 8 或 16&#xff0c;默认是16sampleRate: 8000, // 采样率&#xff0c;支持 11025、16000、22050、24000、44100、48000&#xff0c;根据浏览器默认值&#x…

Android webview录音权限和音频自动播放

项目背景&#xff1a;我们通过layabox&#xff0c;制作了H5页面&#xff0c;可以在微信中&#xff0c;手机浏览器中使用&#xff0c;现在需要将H5页面集成到Android的APP中。 遇到的问题&#xff1a; 1.遇到的第一个问题&#xff0c;是获取录音权限的问题&#xff0c;我已经给…

html 苹果微信录音js,基于JS开发微信网页录音功能的实例代码

具体代码如下所示&#xff1a; wx.ready(function () { var startRecordflag false var startTime null //btnRecord 为录音按钮dom对象 btnRecord.addEventListener(touchstart, function (event) { event.preventDefault(); startTime newDate().getTime(); // 延时后录音…

std::string 与 std::wstring 互转

前言: 最近接触了一些 win32 方便的编程,由于不熟 可能会写一写这方便的基础东西 相当于 写日记了 提升一下 他们的声明 string 是 char wstring 是wchar_t 什么是wchar_t ? string 转 wstring inline std::wstring StringToWString(const std::string& str) {int len…