Android开发丶集成微信原生分享并于分享网页时加载网络缩略图
微信分享也是一项很常用的功能了,以往都是用友盟或者mobShareSDK框架来实现的,这两者在微信官方的sdk基础上封装的很好,并且加入了一些很实用性的功能,不过这次因为只有微信平台的分享,而且微信登录也是基于微信官方的原生SDK的,所以我们就不用再去大费周章地使用友盟和mobsharesdk了,而且也可以学习些新的东西,经过一番折腾调试,成功地把分享集成成功了,期间也遇到了一些坑,而且微信官方的文档确实不太友好,因此这里对其进行下总结归纳。
有关微信原生登录的请看我另一篇博文
https://blog.csdn.net/u014078990/article/details/83752223
还是效果图走起来:
、
怎么样,不错吧,下来详述实现流程。
1.首先当然是去微信开放平台申请应用的appid和appkey了,这里我不再详述了。
2.新建wxapi包和WXEntryActivity及相关继承重写我在发布的《Android开发丶集成微信原生登录》这篇博文里已经有了说明,不再复述。
3.首先打开WXEntryActivity写微信分享的回调
这里比较重要的一点是(敲黑板!!!)
微信分享和微信登录的回调都走的onResp()方法,所以我们要加以辨别,否则会混淆一团,好在官方已经返回了相应的type值供我们判断
//请求回调结果处理
@Override
public void onResp(BaseResp baseResp) {switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_OK:switch (baseResp.getType()){case ConstantsAPI.COMMAND_SENDAUTH:String code = ((SendAuth.Resp) baseResp).code;getAccessToken(code);Log.d("fantasychongwxlogin", code.toString()+ "");break;case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:Log.d("Fan22", "分享成功");Toast.makeText(getApplicationContext(), "分享成功", Toast.LENGTH_SHORT).show();finish();break;default:break;}break;case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权finish();break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消finish();break;default:finish();break;}
}
4.回到启动分享的入口
这里以最常见的分享web网页为例
首先肯定是判断设备是否安装微信了
if (!api.isWXAppInstalled()) {Toast.makeText(WebViewActivity.this, "您的设备未安装微信客户端", Toast.LENGTH_SHORT).show();
}
当检测到有安装微信客户端,开始后续的方法。
当分享网页时,一般会由这三种控件构成,标题,描述,缩略图
那么问题来了,标题和描述官方都给了相应的参数设置,没什么问题,但是缩略图官方仅支持加载本地的bitmap
如果我们实际需求中是个图片url怎么办?
办法当然是有的,考虑后我们决定把这个网络图片下载到本地保存成bitmap不就可以了。(我太特么机智了)
5.这里就涉及到下载图片了,该方法调用时要放在子线程中,之后再通过runOnUiThread()方法操作UI线程即可,相关代码附上
/*** 把网络资源图片转化成bitmap* @param url 网络资源图片* @return Bitmap*/
public static Bitmap GetLocalOrNetBitmap(String url) {Bitmap bitmap = null;InputStream in = null;BufferedOutputStream out = null;try {in = new BufferedInputStream(new URL(url).openStream(), 1024);final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();out = new BufferedOutputStream(dataStream, 1024);copy(in, out);out.flush();byte[] data = dataStream.toByteArray();bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);data = null;return bitmap;} catch (IOException e) {e.printStackTrace();return null;}
}
private static void copy(InputStream in, OutputStream out)throws IOException {byte[] b = new byte[1024];int read;while ((read = in.read(b)) != -1) {out.write(b, 0, read);}
}private String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
6.我们先检测下该网络图片是否保存成本地bitmap了,先用个imageview检测下
iv.setImageBitmap(bitmap);
有了,有了,红框的就是!
7.接下来设置相关分享参数
那么问题又来了,如果因为网络或者某些不可描述的问题导致图片没下下来咋整?
完全不慌,检测是否为空,如果空的话,加载本地的就可以了。
if (bitmap== null){bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round);
}
接下来设置标题,网页等参数
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://www.baidu.com";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "这是网页标题";
msg.description = "这是网页描述";
将bitmap进行裁剪,赋值
thumbBmp = Bitmap.createScaledBitmap(bitmap, 150, 150, true);
if (bitmap != null && !bitmap.isRecycled()) {bitmap = null;
}
msg.thumbData = Util.getBitmapBytes(thumbBmp, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
//根据type设置分享情景
switch (type) {case TYPE_WECHAT://分享到微信好友req.scene = SendMessageToWX.Req.WXSceneSession;break;case TYPE_WECHAT_MOMENT://分享到微信朋友圈req.scene = SendMessageToWX.Req.WXSceneTimeline;break;
}
api.sendReq(req);
以上代码中,req.scene是设置分享对象的,决定微信好友还是朋友圈,因此我们可以通过在不同的入口传递不同的参数进行判断,决定分享的对象。
showShare(TYPE_WECHAT);
showShare(TYPE_WECHAT_MOMENT);
这里说明一下遇到的一些现象和问题:
1.如果不配置APPID和APPSECRET,微信客户端无法调起
private static final String APP_ID = "";//空值
解决办法:在申请到正式的APPID,可以先使用其余通过审核的应用的APPID值,新建一个测试项目与那个通过审核的应用的包名一致,签名文件一致,保证微信能正常调起以及流程正常跑通,之后把相关代码移植到正式项目中,最后在正式项目中更换正式APPID即可。
2.当微信未登陆时,点击分享可以调起客户端到登陆界面,登陆完成后一闪而过回到应用界面,无法分享到好友或者朋友圈。
解决办法:当前的配置的APPID值与包名不匹配。更换正式APPID值即可。
3.下载bitmap的方法GetLocalOrNetBitmap()必须在子线程中运行。
至此全部完成,demo附上!(因为某些不可描述的原因,本DEMO没有APPID和APPSECRET值,无法调起微信客户端,主要看流程即可)
资源下载
Android开发丶集成微信原生分享并于分享网页时加载网络缩略图相关推荐
- Android开发丶集成微信原生登录
好久没写博客了,大概是与ReactNative大战半月已经有点疲惫了,说起集成微信三方登录,还记得上次实现功能还是刚参加工作时,用Mob的ShareSDK来集成实现的,该平台集成了数个主流平台的分享和 ...
- Android开发支付集成——微信集成
支付宝支付传送门:https://www.cnblogs.com/dingxiansen/p/9208949.html 二.微信支付 1. 微信支付流程图 相比较而言,微信支付是要比支付宝麻烦一些,并 ...
- ShareSDK集成微信、QQ、微博分享
1.前言 为什么要使用第三方的作为集成分享的工具呢?而不去用官方的呢?有什么区别么? 一个字"快",如果你使用官方的得一个个集成他们的SDK,相信这是一个痛苦的过程. 2.准备需要 ...
- android微信风格,Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】
本文实例讲述了Android开发实现模仿微信小窗口功能.分享给大家供大家参考,具体如下: 运用方法: 将显示窗口的风格 设置为对话框风格即可 具体效果: 具体实现: 首先我们先定义布局文件: andr ...
- 2019 年美团点评高级 Android 开发寒冬跳槽涨薪经验掏心分享
2019 年美团点评高级 Android 开发寒冬跳槽涨薪经验掏心分享 目录 个人简介 笔者的简要介绍 跳槽涨薪要考虑的方面有哪些? 你是正在拿着卖白菜的钱,操着卖白粉的心吗? 你真得觉得是时候跑路了 ...
- android仿微信图片上传进度,Android开发之模仿微信打开网页的进度条效果(高仿)...
一,为什么说是真正的高仿? 阐述这个问题前,先说下之前网上的,各位可以复制这段字,去百度一下 "仿微信打开网页的进度条效果",你会看到有很多类似的文章,不过他们有个共同点,就是实 ...
- android仿微信 进度条,Android开发之模仿微信打开网页的进度条效果(高仿)
一,为什么说是真正的高仿? 阐述这个问题前,先说下之前网上的,各位可以复制这段字,去百度一下 "仿微信打开网页的进度条效果" ,你会看到有很多类似的文章,不过他们有个共同点,就是 ...
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)...
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...
- 微信小程序开发之scroll-view上拉加载数据实现
微信小程序开发之scroll-view上拉加载数据实现 一.开发思路 1.使用小程序的scroll-view组件中提供了一个bindscrolltolower属性监听组件的滑动到了底部 https:/ ...
最新文章
- 浅谈Service Mesh体系中的Envoy
- 【Pytorch学习】用pytorch搭建第一个神经网络
- Python中的函数递归
- 完课率最高 | 带学吴恩达《机器学习》课程和作业,带打Kaggle全球顶级大赛!...
- 你有一个向LiveVideoStackCon讲师提问的机会
- android UI
- ubuntu中将git 提交编译器nano 修改为vim
- cpu上干硅脂怎么清理_笔记本电脑散热硅脂的正确涂法
- 浅析Hibernate映射(五)——集合映射
- Android API中文文档(111) —— MailTo
- java inputstream长度_Java InputStream.available获取数据流字节长度大小
- 旁枝末梢(我好像稍微理解了mvc和mvvm)
- Linux安装nginx做端口映射
- su的2019面试准备
- 【Python基础教程】while循环用法详解
- win7 显示快捷方式扩展名 lnk
- jquery 蔚蓝网
- 百度翻译api和SpringBoot集成
- Echodyne为其行业领先的CUAS雷达EchoGuard拓展市场
- 区分H5调用手机相机与相册
热门文章
- H5手机端JS常用屏幕宽度和高度获取方法
- win7系统安装office 2010 visio 出现MSXML安装后依旧无法安装的解决办法
- esp8266实现coap协议。
- 在IOS上YUV NV21格式的CVPixelBufferRef转opencv的RGB格式cv::Mat的方法
- 浅谈三级管(PNP和NPN)导通基极(B)电位情况
- python将多个excel合并或拆分
- java导出的文件名带正斜杠_如何在名称中创建带正斜杠的注册表项
- ubuntu armv7l安装docker-comose
- TEC控温模块电路分析
- MapGIS IGServer开发平台学习版安装文档