2010-03-19 17 views
5

Creé una aplicación nativa de Android que básicamente aloja un control webView. Ese webView luego se usa para cargar una página que llama a window.openDatabase desde JavaScript. Puedo confirmar con éxito que la API existe al verificar window.openDatabase.¿Cómo llamo a window.openDatabase desde una vista web alojada en una aplicación de Android?

Llamar a este método devuelve un nulo cuando se llama en un control de webView alojado. Llamar al mismo método en el navegador Android devuelve una instancia de la base de datos.

¿Alguien conoce las permutaciones en el manifiesto o la configuración en el control webView que deben configurarse para acceder a la base de datos? ¿Es esto posible en una aplicación nativa?

Respuesta

8

Para utilizar la API de base de datos que tiene que configure your WebView aceptar HTML5 llamadas bases de datos:

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

También puede reemplazar el método onExceededDatabaseQuota de su WebChromeClient si usted quiere controlar su cuota de almacenamiento:

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

Gracias pfleidi, en realidad tenía esos ajustes en su lugar previamente. ¿Debo cambiar algo en el archivo de manifiesto para otorgar permisos adicionales a mi aplicación? ¿Lo has ejecutado con éxito en un emulador o dispositivo, actualmente estoy usando un NexusOne? – Kevin

+1

Sí, hice algunas pruebas recientemente. Asegúrese de que el nombre de su paquete sea el correcto. – pfleidi

5

Esta solución funcionó para mí:

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

También se puede encontrar here

Cuestiones relacionadas