友盟QQ分享不显示缩略图

友盟QQ分享不显示缩略图

分享本地图片

背景:后台返回给我图片的byte[]数组,起初之前都是分享在线图片用的下面这个方法。

// 分享在线 图片
oks.setImageUrl(shareImgUrl);

然后简单找了下 OnekeyShare 的本地图片分享方法。看到了有个方法

// 分享本地 图片  传bitmap
public void setImageData(Bitmap iamgeData) {
		if(iamgeData != null) {
			params.put("imageData", iamgeData);
		}
	}

应该就是它了,刷刷刷,搞定,测试了下微信,没问题!我果然是天才。(可看似简单没想到坑就慢慢的埋下来了)
提供下 byte 转 bitmap的 方法(网上也能搜到)

// byte[]  转  bitmap
    private static Bitmap BytesToBitmap(byte[] bis){
        return BitmapFactory.decodeByteArray(bis, 0, bis.length);
    }

然后掉了下这个api

// 分享本地图片  其它设置和话题无关就不写了
    OnekeyShare oks = new OnekeyShare();
    if(islocal){
       if(data!=null && data.length >0) {
          oks.setImageData(BytesToBitmap(data));
       }else {
          oks.setImageData(((BitmapDrawable) context.getResources().getDrawable(R.mipmap.img_logo)).getBitmap());
       }
    }else {
          if (!TextUtils.isEmpty(shareImgUrl))
              oks.setImageUrl(shareImgUrl);
    }

然后今天测试在快下班的时候提了一个bug,QQ 和QQ 空间分享不能显示缩略图,而是显示App 的 Logo。几经周折,最后终于找到问题了。上面那个 setImageUrl 方法,不适用于QQ 和QQ 空间分享。最终换了一个方法 setImagePath就是将 byte[] 数组最终转成本地的一个图片。方法如下

// 分享本地图片
    OnekeyShare oks = new OnekeyShare();
    if(islocal){
       if(data!=null && data.length >0) {
          String path = FileHelper.saveBitmap(BytesToBitmap(data));
          oks.setImagePath(path);
       }
    }else {
          if (!TextUtils.isEmpty(shareImgUrl))
              oks.setImageUrl(shareImgUrl);
    }
// 保存图片到本地
    public static String saveBitmap(Bitmap bm) {
        isHaveSDCard();
        File file;
        if (isHaveSDCard()) {
            file = Environment.getExternalStorageDirectory();
        } else {
            file = Environment.getDataDirectory();
        }
        File abfile = new File(file.getPath() + "/miguvr/data/");
        if (!abfile.isDirectory()) {
            abfile.delete();
            abfile.mkdirs();
        }
        if (!abfile.exists()) {
            abfile.mkdirs();
        }
        return writeBitmap(abfile.getPath(), "/temp.png", bm);
    } 

    public static boolean isHaveSDCard() {
        String SDState = android.os.Environment.getExternalStorageState();
        if (SDState.equals(android.os.Environment.MEDIA_MOUNTED)) {
            return true;
        }
        return false;
    }

    /**
     * 保存图片
     *
     * @param path
     * @param name
     * @param bitmap
     */
    public static String writeBitmap(String path, String name, Bitmap bitmap) {
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }

        File _file = new File(path + name);
        if (_file.exists()) {
            _file.delete();
        }
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(_file);
            if (name != null && !"".equals(name)) {
                int index = name.lastIndexOf(".");
                if (index != -1 && (index + 1) < name.length()) {
                    String extension = name.substring(index + 1).toLowerCase();
                    if ("png".equals(extension)) {
                        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                    } else if ("jpg".equals(extension)
                            || "jpeg".equals(extension)) {
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return _file.getPath();
    }    

分享在线图片

在线图片也是 网上搜上面问题无意中发现的,需要更改为https 图片。http 不适用了(没测试过,自己试哈)
你好,打工人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Flutter中使用友盟分享,首先需要在项目中添加友盟分享的插件。可以使用flutter_umeng_share插件,它提供了友盟分享的各种功能。 1. 在pubspec.yaml文件中添加依赖: ``` dependencies: flutter_umeng_share: ^2.0.0 ``` 2. 在项目中集成友盟分享SDK: 在Flutter项目的MainActivity.java文件中,添加以下代码: ``` import com.umeng.socialize.UMShareAPI; public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); UMShareAPI.get(this);//添加这一行 } } ``` 3. 初始化友盟分享SDK: 在项目中的main.dart文件中,添加以下代码: ``` import 'package:flutter_umeng_share/flutter_umeng_share.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await FlutterUmengShare.init( androidKey: 'your_umeng_android_app_key', iosKey: 'your_umeng_ios_app_key'); runApp(MyApp()); } ``` 其中,'your_umeng_android_app_key'和'your_umeng_ios_app_key'需要替换为你自己的友盟App Key。 4. 使用友盟分享: ``` import 'package:flutter_umeng_share/flutter_umeng_share.dart'; //分享文本 FlutterUmengShare.shareText('This is a test.'); //分享图片 FlutterUmengShare.shareImage(imagePath: 'image_path', text: 'This is a test.'); //分享链接 FlutterUmengShare.shareWeb( url: 'https://www.example.com', title: 'This is a test.', description: 'This is a test.', thumb: 'thumb_image_path'); ``` 以上就是在Flutter中使用友盟分享的基本步骤。你可以根据自己的需求,选择更多的分享方式,例如分享音乐、视频等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值