从Android WebView应用程序导出或发送电子邮件

时间:2015-12-17 03:43:29

标签: android webview

我构建了一个WebView应用程序,它将一些信息存储在DOM存储(localstorage)中。作为应用程序的一部分,我想将该数据导出到.csv文件或电子邮件(附件为.csv等)。

我能够以.csv格式获取数据,但我不确定如何导出或发送包含数据的电子邮件。

单击“导出”按钮后,我尝试了以下操作:

var currentData = getHistorySummary("myObject");
var dataArray = [];
for (var i = 0; i < currentData.length; i++) {
dataArray.push(JSON.parse(currentData[i]));
}
dataArray.sortBy('id');
var csv = convertJSONtoCSV(dataArray);

var csvContent = "data:text/csv;charset=utf-8,";
csvContent += csv;
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
window.open(encodedUri);

然而此时没有任何反应,我收到以下警告:

无法调用determinVisibility() - 从未看到pid的连接:27146

有没有更好的方法来“导出”这些信息,或者我错过了什么?

3 个答案:

答案 0 :(得分:1)

我最终做了以下操作(.csv内容在电子邮件正文中发送):

mWebView.setWebViewClient(new WebViewClient() {

        public boolean shouldOverrideUrlLoading(WebView webView, String url) {
            if (url.startsWith("data:text/csv")) {
                Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:someone@example.com"));
                i.putExtra(android.content.Intent.EXTRA_TEXT, URLDecoder.decode(url));
                startActivity(i);
            }
            return true;
        }
    });

这不是理想的,但对于我正在研究的项目,它会做的。

答案 1 :(得分:0)

通过提供文件名和文件路径来尝试此操作 -

 try 
   {        
       String fileName = URLEncoder.encode(yourfilename, "UTF-8");
       String PATH =  Environment.getExternalStorageDirectory()+"/"+fileName.trim().toString();

       Uri uri = Uri.parse("file://"+PATH);
       Intent i = new Intent(Intent.ACTION_SEND);
       i.setType("text/plain");
       i.putExtra(Intent.EXTRA_EMAIL, "");
       i.putExtra(Intent.EXTRA_SUBJECT,"android - email with attachment");
       i.putExtra(Intent.EXTRA_TEXT,"");
       i.putExtra(Intent.EXTRA_STREAM, uri);
       i.setType("text/csv");
       context.startActivity(Intent.createChooser(i, "Select application"));
   } 
   catch (UnsupportedEncodingException e) 
   {
        // TODO Auto-generated catch block
        e.printStackTrace();
   }

来源链接here

答案 2 :(得分:0)

您可以使用[WebView#addJascriptInterface()](http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,java.lang.String))并发布一个发送电子邮件的方法,也可能也传递localstorage中的数据。