android之微信分享图片
微信图像分享分为三类1、二进制图片2、本地图片3、URL地址图片
XML分析:三个Button 添加点击事件!
注意清单文件 权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
1、分享二进制图片:
将Bitmap转换成byte格式的数组 类
参数1: 穿入bitmap对象,参数2: 是否释放资源
private byte[] bitmapToByteArray(Bitmap bitmap, boolean recycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
if (recycle) {
bitmap.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
二进制图片分享代码:
// 第一步:获取二进制图像的Bitmap对象
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
// 第二步:创建WXImageObject,并包装bitmap
WXImageObject imgObj = new WXImageObject(bitmap);
// 第三步:创建WXMediaMessage对象,并包装WXimageObjext对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
// 第四步:压缩图片
Bitmap thumBitmap = bitmap.createScaledBitmap(bitmap, 120, 150, true);
// 释放图片占用的内存资源
bitmap.recycle();
msg.thumbData = bitmapToByteArray(thumBitmap, true);//压缩图
// 第五步:创建SendMessageTo.Req对象,发送数据
SendMessageToWX.Req req = new SendMessageToWX.Req();
// 唯一标识
req.transaction = buildTransction("img");
// 发送的内容或者对象
req.message = msg;
req.scene = send_friend.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
2、分享本地图片:
第一步:判读图像文件是否存在
String path ="/storage/emulated/0/image/123.jpg";
File file = new File(path);
if(!file.exists()) {
Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
}
// 第二步:创建WXImageObject,
WXImageObject imgObj = new WXImageObject();
// 设置文件的路径
imgObj.setImagePath(path);
// 第三步:创建WXMediaMessage对象,并包装WXimageObjext对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
// 第四步:压缩图片
Bitmap bitmap = BitmapFactory.decodeFile(path);
Bitmap thumBitmap = bitmap.createScaledBitmap(bitmap, 120, 150, true);
// 释放图片占用的内存资源
bitmap.recycle();
msg.thumbData = bitmapToByteArray(thumBitmap, true);//压缩图
// 第五步:创建SendMessageTo.Req对象,发送数据
SendMessageToWX.Req req = new SendMessageToWX.Req();
// 唯一标识
req.transaction = buildTransction("img");
// 发送的内容或者对象
req.message = msg;
req.scene = send_friend.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
3、分享URL图片:
由于主线程中不能请求网络,需要开启线程:
Thread thread = new Thread(new Runnable() { @Override public void run() { try { // 第一步:创建WXImageObject对象,并设置URL地址 String url = "http://avatar.csdn.net/2/C/8/1_small_and_smallworld.jpg"; WXImageObject imgObj = new WXImageObject(); // 设置图片的url imgObj.imageUrl = url; // 第二步:创建WXMediaMeaasge对象,包装WXImageObject对象 WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; // 第三步:压缩图片 Bitmap bitmap = BitmapFactory.decodeStream(new URL(url).openStream()); Bitmap thumBitmap = bitmap.createScaledBitmap(bitmap, 120, 150, true); // 释放资源 bitmap.recycle(); msg.thumbData = bitmapToByteArray(thumBitmap, true); // 第四部:创建SendMessageTo.Req对象,发送数据 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransction("img"); req.message = msg; req.scene = send_friend.isChecked()? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession; api.sendReq(req); } catch (Exception e) { e.printStackTrace(); } } }); thread.start();
}