I created a native Android app that basically hosts a webView control. That webView is then used to load a page that calls window.openDatabase from JavaScript. I can successfully confirm that the API exists by verifying window.openDatabase.
Calling this method returns a null when called in a hosted webView control. Calling the same method in the Android Browser returns an instance of the database.
Does anyone know the permessions in the manifest or settings on the webView control that need to be set to access the database? Is this even possible in a native app.
To use the database API you have to configure your WebView to accept HTML5 database calls:
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
...
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/your.package.name/database_name");
You may also override the onExceededDatabaseQuota method of your WebChromeClient if you want to control your storage quota:
public void onExceededDatabaseQuota(String url, String
databaseIdentifier, long currentQuota, long estimatedSize, long
totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(204801);
}
This solution worked for me:
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
String databasePath = this.getApplicationContext().getDir("database",
Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(databasePath);
Can be also found here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With