Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I call window.openDatabase from a webView hosted in an android application?

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.

like image 439
Kevin Avatar asked Mar 19 '10 01:03

Kevin


2 Answers

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);
} 
like image 145
pfleidi Avatar answered Oct 01 '22 09:10

pfleidi


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

like image 35
Daniel Avatar answered Oct 01 '22 08:10

Daniel