From e9bed7fab8ee98a750c76384ddb004cb3e5df454 Mon Sep 17 00:00:00 2001 From: Tom Xu Date: Fri, 8 Jan 2021 15:08:35 +0800 Subject: [PATCH] feat: android add share file --- .../com/theweflex/react/WeChatModule.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/android/src/main/java/com/theweflex/react/WeChatModule.java b/android/src/main/java/com/theweflex/react/WeChatModule.java index f87df52..c563522 100644 --- a/android/src/main/java/com/theweflex/react/WeChatModule.java +++ b/android/src/main/java/com/theweflex/react/WeChatModule.java @@ -52,6 +52,7 @@ import com.tencent.mm.opensdk.openapi.WXAPIFactory; import com.tencent.mm.opensdk.constants.ConstantsAPI; import com.tencent.mm.opensdk.modelbiz.SubscribeMessage; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -59,7 +60,10 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; import java.net.URI; +import java.net.URL; import java.util.ArrayList; import java.util.UUID; @@ -218,6 +222,61 @@ public class WeChatModule extends ReactContextBaseJavaModule implements IWXAPIEv callback.invoke(null, api.sendReq(req)); } + public byte[] loadRawDataFromURL(String u) throws Exception { + URL url = new URL(u); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + InputStream is = conn.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(is); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + final int BUFFER_SIZE = 2048; + final int EOF = -1; + + int c; + byte[] buf = new byte[BUFFER_SIZE]; + + while (true) { + c = bis.read(buf); + if (c == EOF) + break; + + baos.write(buf, 0, c); + } + + conn.disconnect(); + is.close(); + + byte[] data = baos.toByteArray(); + baos.flush(); + + return data; + } + + + /** + * 分享文本 + * + * @param data + * @param callback + */ + @ReactMethod + public void shareFile(ReadableMap data, Callback callback) throws Exception { + WXFileObject fileObj = new WXFileObject(); + fileObj.fileData = loadRawDataFromURL(data.getString("url")); + + WXMediaMessage msg = new WXMediaMessage(); + msg.mediaObject = fileObj; + msg.title = data.getString("title"); + + SendMessageToWX.Req req = new SendMessageToWX.Req(); + req.transaction = String.valueOf(System.currentTimeMillis()); + req.message = msg; + req.scene = data.hasKey("scene") ? data.getInt("scene") : SendMessageToWX.Req.WXSceneSession; + callback.invoke(null, api.sendReq(req)); + } + /** * 分享文本 *