三方App使用企业微信分享图片,使用fileData参数分享异常

问题

我的app在集成企业微信分享,在提供图片类型分享时,使用发现有一个fileData的参数,当我使用这个参数后,发现点击发送之后,图片根本就没有发送出去。(注:ios和android都有此问题)

最后没办法,只能按照官网的示例代码,使用filePath参数,才正常使用图片分享。

为什么想使用fileData

说说我为什么一开始想用fileData参数吧,应为js层传递的图片数据分为两种:1.url链接;2.base64。在第二种情况下,通常是转成 byte[] 的,然后传给data参数的(参考微信的图片分享

解决方案

 使用filePath参数

具体实现

将js层传过来的图片参数,通过相关方法,保存图片到本地,然后获取路径,传递给filePath参数

相关方法

一些 xxxUtils 的对象是安卓通用工具库中的对象,比如LogUtils

BitmapUtils.java

/**
     * 根据图片的网络地址获得Bitmap对象
     * <br>    注:请在子线程使用本方法
     *
     * @param url
     * @return 可能返回null
     */
    public static Bitmap getBitmapByUrl(String url) {
        URL fileUrl = null;
        Bitmap bitmap = null;
        try {
            fileUrl = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) fileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    /**
     * base64字符串转bitmap
     * <br>    注:请在子线程使用本方法
     *
     * @param base64String
     * @return
     */
    public static Bitmap base64StringToBitmap(String base64String) {
        byte[] data = Base64.decode(base64String, Base64.DEFAULT);
        return BitmapFactory.decodeByteArray(data, 0, data.length);
    }

getImageFile方法

/**
     * 将图片保存到本地相册的缓存目录
     *
     * @param type
     * @param image
     * @return
     */
    private static File getImageFile(String type, final String image) {
        Bitmap bitmap = null;
        if ("image".equals(type)) {
            bitmap = BitmapUtils.getBitmapByUrl(image);
        } else {
            bitmap = BitmapUtils.base64StringToBitmap(image);
        }

        String imageCacheFileName = "myApp";
        // 清除之前缓存的图片
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
            File destFile = new File(picDir, imageCacheFileName);
            FileUtils.deleteAllInDir(destFile);
        } else {
            // 从媒体库中移除之前缓存的图片
            int numImagesRemoved = reactContext.getContentResolver()
                    .delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                            , MediaStore.Images.Media.RELATIVE_PATH + "=\""
                                    + Environment.DIRECTORY_DCIM + "/"
                                    + imageCacheFileName + "/" + "\""
                            , null);
            LogUtils.d("删除图片的数量:" + numImagesRemoved);
        }

        // 保存图片的相册缓存
        File file = ImageUtils.save2Album(bitmap, imageCacheFileName
                , Bitmap.CompressFormat.JPEG, true);
        if (file == null) {
            // todo:此处直接返回错误代码和信息给js层
            promise.resolve(-100, "缓存图片失败");
            return null;
        }
        return file;
    }

补充 网页类型分享

企业微信分享网页类型,中的缩略图(android是thumb,ios是icon),在使用时也会有thumbData参数,同上,不要使用,有问题,使用官网示例的thumbUrl参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值