最近一个项目做的源生微信分享,测试出现问题的可以分享出去, 发现有的可以分享出去有的不能分享出去
想半天想不出来,过了两天突然感觉是不是分享的图片太大了,
顿时就恍然大悟,原来我从网络上请求的图片转换成Bitmap就没有管了,直接就分享出去,难怪有的可以分享,有的又不可以,
后来查了一下,图片好像要限制在32k以下才能分享,微信这个坑比也没说。
下面就是我把网络图片url转换成Bitmap然后在设置缩略图的方法
1:首先定义一个接口:因为是从网络上获取的ImageUrl,这里使用接口回调
下面的是解析本地图片,我们知道解析本地的图片时比较简单的只需要如下一行代码就可以了,如下一行代码:
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.img_customeravatar);
这下面是处理网络图片URL定义的接口。
//自定义一个接口
public interface HttpCallBackListener {
void onFinish(Bitmap bitmap);
void onError(Exception e);
}
2:这里进行网络URL转换成Bitmap对象的方法:
/**
* bitmap转换
* @param
* @return
*/
public void getImage(final String path, final HttpCallBackListener listener) {
new Thread(new Runnable() {
@Override
public void run() {
URL imageUrl = null;
try {
imageUrl = new URL(path);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
Bitmap bitmap1= createBitmapThumbnail(bitmap,false);
if (listener != null) {
listener.onFinish(bitmap1);
}
is.close();
} catch (IOException e) {
if (listener != null) {
listener.onError(e);
}
e.printStackTrace();
}
}
下面的方法是把获取的Bitmap图片变小,压缩到32K以下。
(这里最重要的也是这个问题的核心利用该方法把Bitmap变小)
public Bitmap createBitmapThumbnail(Bitmap bitmap,boolean needRecycler){
int width=bitmap.getWidth();
int height=bitmap.getHeight();
int newWidth=80;
int newHeight=80;
float scaleWidth=((float)newWidth)/width;
float scaleHeight=((float)newHeight)/height;
Matrix matrix=new Matrix();
matrix.postScale(scaleWidth,scaleHeight);
Bitmap newBitMap=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
if(needRecycler)bitmap.recycle();
return newBitMap;
}
}).start();
}
3:最后在微信分享的方法里面调用就OK了!
private void shareWebToWeixin(final String webUrl) {
if (!MallApplication.mWxApi.isWXAppInstalled()) {
ToastUtil.toast(您还未安装微信客户端);
return;
}
if (!NetUtil.IsActivityNetWork(GoodsDetailActivity.this)) {
ToastUtil.toast("请检查您的网络连接");
return;
}
(从这里开始实现分享)
getImage(gd.getImgUrl().get(0), new HttpCallBackListener() {
@Override
public void onFinish(final Bitmap bitmap) {
final Bitmap bitmap1=bitmap;
runOnUiThread(new Runnable() {
@Override
public void run() {
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = webUrl;
final WXMediaMessage msg = new WXMediaMessage(webpage);
//新加上去的
msg.title = gd.getName();
//新加上去的
msg.description = gd.getDescription();
msg.setThumbImage(bitmap);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = "webpage";
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
MallApplication.mWxApi.sendReq(req);
}
});
}
@Override
public void onError(Exception e) {
e.printStackTrace();
}
});
//原来的
//Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.img_customeravatar);
// msg.setThumbImage(thumbs);
}