将图像从webview传递到应用程序(IOS和Android)

时间:2015-10-08 21:12:23

标签: android ios android-webview hybrid-mobile-app wkwebview

我正在构建依赖于webview中的javascript与托管应用程序之间的双向通信的混合应用程序。

态度有所不同,因为 IOS JS可以向swift发送消息(使用WKWebView),通过

userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)

实施WKScriptMessageHandler协议时,

而在 Android 中,在调用@JavascriptInterface后,JS实际上可以调用具有addJavascriptInterface()注释的Android方法。

这两种方法都适合我,因为我使用JSON字符串传递数据。问题是,如果我需要从网页向应用程序传递媒体文件,说图像或视频,该怎么办?我应该在json中传递一个位图吗?看起来有点幼稚......推荐?

编辑:将图像从应用程序传递到网页时,我将文件保存到文件系统并将文件名发送到webview。它可以反过来做吗?可以 javascript 保存到托管移动设备文件系统吗?

2 个答案:

答案 0 :(得分:0)

你必须托管(如果是webapp)或存储(如果是移动应用程序)图像并传递图像网址,而不是图像。 几乎所有使用图像位图的api也都采用图像网址。

问候 Ashish

答案 1 :(得分:0)

要回答第二个问题,即有评论,请使用以下代码。 这里的html内容是你的二进制内容:

FileWriter imageFileWriter = null;
BufferedWriter imageBufferedWriter = null;
ABOUtil.createDir(InMemoryDataStructure.FILE_PATH.getFileDirForimage());
File imageFileDir = new File(InMemoryDataStructure.FILE_PATH.getFileDirForimage());
String imageName = "/finalimage"+ filename + jpg
File mimageFile = new File(imageFileDir, imageName);

try {
    imageFileWriter = new FileWriter(mimageFile, false);
    imageBufferedWriter = new BufferedWriter(imageFileWriter);
    StringBuilder sb = new StringBuilder();

    sb.append(htmlContent);
    sb.append(scriptInjectJavascript(lstimageNameValue));
    imageBufferedWriter.write(sb.toString());
    imageBufferedWriter.close();
    return mimageFile;
} 
catch (IOException e) {
    MAFLogger.e("", "", e);
}
finally{
    if(imageFileWriter!=null)
        try {
            imageFileWriter.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            MAFLogger.e("","",e);
        }
    if(imageBufferedWriter!=null)
        try {
            imageBufferedWriter.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            MAFLogger.e("","",e);
        }
}