Android(安卓)实现微信分享好友和朋友圈
16lz
2021-01-26
1.在微信开放平台 创建移动应用,并通过审核,这里要注意的是应用签名要一致,(下载官网上的APK,输入包名就可以生成了)
2.具体用法可以看官网的文档,这里只总结使用过程遇到的问题和解决方法
3.
参照这个用法分享是可以的,但是如果你的图片大于32kb就不会调微信分享的界面。
MicroMsg.SDK.WXApiImplV10: sendReq checkArgs fail
问题:如何解决大于32kb图片不调微信的问题
解决方案:1.因为图片是后台返回的url,android 端这边暂时只能将本地的资源压缩,而不能压缩url的图片,会提示说找不到资源。。(目前我用过很多办法都不行,如果有好的方法希望分享给我,谢谢)。所以目前我这边是后台压缩完图片返回给我
public class WeChatShareUtil { //从官网申请的合法appId private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001; //IWXAPI是第三方app和微信通信的openapi接口 private IWXAPI api; private Context context; public static WeChatShareUtil weChatShareUtil; public static WeChatShareUtil getInstance(Context context) { if (weChatShareUtil == null) { weChatShareUtil = new WeChatShareUtil(); } if (weChatShareUtil.api != null) { weChatShareUtil.api.unregisterApp(); } weChatShareUtil.context = context; weChatShareUtil.regToWx(); return weChatShareUtil; } //注册应用id到微信 private void regToWx() { //通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(context, Contonts.APP_ID, false); //将应用的appId注册到微信 api.registerApp(Contonts.APP_ID); } /** * 分享文字到朋友圈或者好友 * * @param text 文本内容 * @param scene 分享方式:好友还是朋友圈 */ public boolean shareText(String text, int scene) { //初始化一个WXTextObject对象,填写分享的文本对象 WXTextObject textObj = new WXTextObject(); textObj.text = text; return share(textObj, text, scene); } /** * 分享图片到朋友圈或者好友 * * @param bmp 图片的Bitmap对象 * @param scene 分享方式:好友还是朋友圈 */ public boolean sharePic(Bitmap bmp, int scene) { //初始化一个WXImageObject对象 WXImageObject imageObj = new WXImageObject(bmp); //设置缩略图 Bitmap thumb = Bitmap.createScaledBitmap(bmp, 60, 60, true); bmp.recycle(); return share(imageObj, thumb, scene); } /** * 分享网页到朋友圈或者好友,视频和音乐的分享和网页大同小异,只是创建的对象不同。 * 详情参考官方文档: * https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317340&token=&lang=zh_CN * * @param url 网页的url * @param title 显示分享网页的标题 * @param description 对网页的描述 * @param scene 分享方式:好友还是朋友圈 */ public boolean shareUrl(String url, String title, Bitmap thumb, String description, int scene) { //初试话一个WXWebpageObject对象,填写url WXWebpageObject webPage = new WXWebpageObject(); webPage.webpageUrl = url; return share(webPage, title, thumb, 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对象,填写标题、描述 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); } //构造一个Req SendMessageToWX.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及以上支持发送朋友圈 public boolean isSupportWX() { int wxSdkVersion = api.getWXAppSupportAPI(); return wxSdkVersion >= TIMELINE_SUPPORTED_VERSION; } private byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, output); if (needRecycle) { bmp.recycle(); } byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; }}
可以看到shareUrl(String url, String title, Bitmap thumb, String description, int scene)
图片必须是Bitmap
于是我这边就要将url转换为Bitmap
/** * 根据图片的url路径获得Bitmap对象 */ public static Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }
如果有其他好的实现方式欢迎在评论中留言,我实践过之后会对应更新 ,谢谢!
更多相关文章
- Android消息队列模型——Thread,Handler,Looper,Massage Queue
- android中开启线程
- Intent加强
- Android设置Alpha值实现图片渐变效果
- Android(安卓)的消息机制(1)
- Android(安卓)多线程 \Looper 分享
- android中的Context(android内核学习记录)
- Android(安卓)Activity管理之Activity栈
- 干货 | Kotlin超棒的语言特性