views:

300

answers:

1

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.

+2  A: 

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);
} 
pfleidi
Thanks pfleidi, I actually had those settings in place previously. Do I need to change anything in the manifest file to give my app additional permissions? Have you successfully ran this on an emulator or device, I'm currently using a NexusOne.
Kevin
Yes, I did some tests recently. Make sure your package name is the right one.
pfleidi