如何将二进制图像从Android发送到JavaScript

时间:2017-10-02 10:00:26

标签: javascript android

我有一个混合Android应用,我试图将二进制图像文件从Android发送到webview,以便我可以使用JavaScript来旋转/裁剪它。

我尝试将它转换为base64字符串并以这种方式发送,但它花了太长时间,有时甚至永远不会完成发送。这就是我目前所拥有的:

public String bitMapToBase64(){
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    //add support for jpg and more.
    bitMap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream .toByteArray();

    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

    return encoded;
}

有没有办法将数据作为二进制文件发送并在webview上以二进制形式接收,然后使用JavaScript将其转换为File对象?

有没有更有效的方法来尝试这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用JavaScriptInterface

来完成

在Android Java文件中记下以下代码

public class JavaScriptInterface {
    Context mContext;
    JavaScriptInterface(Context c) {
        mContext = c;
    }    

    @JavascriptInterface
 public String bitMapToBase64()
  {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    //add support for jpg and more.
    bitMap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream .toByteArray();

    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

    return encoded;
  }
}

将以下设置设置为您的网页视图

   webView.setWebChromeClient(new WebChromeClient() {});
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);
    webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

然后在您的网页上写下以下代码

Html和javascript:

<input type="button" value="Get from android" onClick="getFromAndroid()" />
<script type="text/javascript">
    var myVar = null;
    function getFromAndroid() {
        myVar = Android.bitMapToBase64();
        alert(myVar);
    }
</script>