分享本地图片
背景:后台返回给我图片的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 不适用了(没测试过,自己试哈)