2018-11-02 15:07:01 1682瀏覽
今天扣丁學(xué)堂Android培訓(xùn)老師給大家主要介紹一下關(guān)于Android微信分享大圖遇到的問題的解決方法,記錄了微信圖片分享出錯(cuò)的坑,具有一定的參考價(jià)值,下面我們一起來看一下吧。首先要做一個(gè)微信圖片分享的功能,但是對于大圖會(huì)如下問題:
public void WXsharePic(String transaction, final boolean isSession, Bitmap bitmap) { //初始化WXImageObject和WXMediaMessage對象 WXImageObject imageObject = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObject; //設(shè)置縮略圖 Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true); bitmap.recycle(); msg.thumbData = getBitmapByte(scaledBitmap); //構(gòu)造一個(gè)Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = transaction + Long.toString(System.currentTimeMillis()); req.message = msg; //表示發(fā)送給朋友圈 WXSceneTimeline 表示發(fā)送給朋友 WXSceneSession req.scene = isSession ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; //調(diào)用api接口發(fā)送數(shù)據(jù)到微信 api.sendReq(req); }
查看微信的文檔,發(fā)現(xiàn)如下信息:
public static byte[] bitmap2Bytes(Bitmap bitmap, int maxkb) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); int options = 100; while (output.toByteArray().length > maxkb&& options != 10) { output.reset(); //清空output bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//這里壓縮options%,把壓縮后的數(shù)據(jù)存放到output中 options -= 10; } return output.toByteArray(); }
public void WXsharePic(String transaction, final boolean isSession, Bitmap bitmap, String path) { //初始化WXImageObject和WXMediaMessage對象 WXImageObject imageObject; if (!StringUtil.isBlank(path)) { imageObject = new WXImageObject(); imageObject.setImagePath(path); } else { imageObject = new WXImageObject(bitmap); } WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imageObject; //設(shè)置縮略圖 Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, true); bitmap.recycle(); msg.thumbData = getBitmapByte(scaledBitmap); //構(gòu)造一個(gè)Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = transaction + Long.toString(System.currentTimeMillis()); req.message = msg; //表示發(fā)送給朋友圈 WXSceneTimeline 表示發(fā)送給朋友 WXSceneSession req.scene = isSession ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; //調(diào)用api接口發(fā)送數(shù)據(jù)到微信 api.sendReq(req); }
private void shareToMoment() { final Bitmap sharePicture = getBitmapByView(svShare); AndPermission.with(this) .permission(Permission.WRITE_EXTERNAL_STORAGE) .onGranted(new Action() { @Override public void onAction(List<String> permissions) { String path = saveImageToGallery(sharePicture); WXsharePic("he" + System.currentTimeMillis(), true, sharePicture, path); } }) .onDenied(new Action() { @Override public void onAction(@NonNull List<String> permissions) { Log.e("Activity", "權(quán)限申請失敗"); } }) .start(); }
public String saveImageToGallery(Bitmap bmp) { // 首先保存圖片 String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dearxy"; File appDir = new File(storePath); if (!appDir.exists()) { appDir.mkdir(); } String fileName = System.currentTimeMillis() + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); //通過io流的方式來壓縮保存圖片 bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } return storePath + "/" + fileName; }
以上就是關(guān)于扣丁學(xué)堂Android微信分享大圖遇到的問題的解決方法全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供完整的體系Android視頻教程讓你快速掌握Android從入門到精通開發(fā)實(shí)戰(zhàn)技能。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Android開發(fā)技術(shù)”的相關(guān)資訊>>