2010-03-19 48 views
5

我创建了一个原生Android应用程序,基本上托管了一个webView控件。该webView然后用于加载从JavaScript调用window.openDatabase的页面。通过验证window.openDatabase,我可以成功确认API存在。如何从android应用程序中托管的webView调用window.openDatabase?

调用此方法在托管的webView控件中调用时返回null。在Android浏览器中调用相同的方法会返回数据库的一个实例。

有没有人知道需要设置访问数据库的webView控件清单或设置中的渗透?这甚至可以在本地应用程序。

回答

8

要使用就得configure your WebView数据库API接受HTML5数据库调用:

WebSettings settings = webView.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setJavaScriptCanOpenWindowsAutomatically(true); 
... 
settings.setDatabaseEnabled(true); 
settings.setDatabasePath("/data/data/your.package.name/database_name"); 

您也可以覆盖你WebChromeClient的onExceededDatabaseQuota方法,如果你想控制你的存储配额:

public void onExceededDatabaseQuota(String url, String 
databaseIdentifier, long currentQuota, long estimatedSize, long 
totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
       quotaUpdater.updateQuota(204801); 
} 
+0

谢谢pfleidi,我以前实际上已经有了这些设置。我是否需要更改清单文件中的任何内容以给我的应用程序额外的权限?你有没有在模拟器或设备上成功运行过这个程序,我目前正在使用NexusOne。 – Kevin 2010-03-19 17:24:48

+1

是的,我最近做了一些测试。确保你的包名是正确的。 – pfleidi 2010-03-24 23:20:51

5

该解决方案为我工作:

WebSettings settings = myWebView.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setDatabaseEnabled(true); 
String databasePath = this.getApplicationContext().getDir("database", 
         Context.MODE_PRIVATE).getPath(); 
settings.setDatabasePath(databasePath); 

也可以找到here

相关问题