我有一个混合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对象?
有没有更有效的方法来尝试这样做?
答案 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>