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,并包装bitmapWXImageObject 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();
}