diff --git a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java index f81aa1edd..021638fc4 100644 --- a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java +++ b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java @@ -1,13 +1,19 @@ package com.mango.moshen.ui.webview; +import android.Manifest; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.media.MediaRecorder; +import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.Looper; import android.text.TextUtils; +import android.util.Base64; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebView; @@ -17,6 +23,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.security.realidentity.RPEventListener; import com.alibaba.security.realidentity.RPResult; import com.alibaba.security.realidentity.RPVerify; +import com.mango.xchat_android_library.utils.file.JXFileUtils; import com.netease.nim.uikit.common.util.log.LogUtil; import com.orhanobut.logger.Logger; import com.umeng.commonsdk.statistics.common.DeviceConfig; @@ -545,4 +552,39 @@ public class JSInterface { if (mActivity instanceof TarotPayWebViewActivity) mActivity.finish(); } + @JavascriptInterface + public void saveBase64Image(String imageBase64) { + mActivity.runOnUiThread(() -> + mActivity.checkPermission( + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) + .subscribe(aBoolean -> { + if (aBoolean) { + try { + byte[] decode = Base64.decode(imageBase64.split(",")[1], Base64.DEFAULT); + Bitmap resource = BitmapFactory.decodeByteArray(decode, 0, decode.length); + File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); + String imgFileName = file + File.separator + System.currentTimeMillis() + ".jpg"; + JXFileUtils.saveBitmapToJPG(resource, imgFileName); + Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + Uri uri = Uri.fromFile(new File(imgFileName)); + intent.setData(uri); + context.sendBroadcast(intent); + callbackSaveBase64ImageResult(1); + } catch (Exception e) { + e.printStackTrace(); + callbackSaveBase64ImageResult(0); + } + } else { + callbackSaveBase64ImageResult(0); + } + }) + ); + } + + private void callbackSaveBase64ImageResult(int result) { + mWebView.evaluateJavascript("saveBase64ImageCallback(" + result + ")", null); + } + }