尝试从webview获取位置时,Android“SQLite数据库无法从/CachedGeoposition.db加载”错误

时间:2013-10-03 16:09:26

标签: javascript android sqlite webview gps

我正在创建一个使用带有chrome客户端的webkit的Android应用程序。我希望能够在网页上请求时获取当前位置。我设置的网页适用于常规浏览器。但是,当我尝试访问webkit中的网页时,我不断收到此错误:

ERROR: 
SQLite database failed to load from /CachedGeoposition.db
Cause - unable to open database file
external/webkit/Source/WebCore/platform/sql/SQLiteDatabase.cpp(71) : bool
WebCore::SQLiteDatabase::open(const WTF::String&, bool)

以下是我的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这是我设置webview和chrome客户端的安卓代码:

    WebView webView = (WebView)findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setGeolocationEnabled(true);

    webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url){
            view.loadUrl(url);
            return false;
        };
    });

    webView.setWebChromeClient(new WebChromeClient() {  
        @Override
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin,  true, false);
        }
    });

我打电话时的javascript错误:

navigator.geolcation.getCurrentPosition( success_function, fail_function )

不会调用成功函数或失败函数。

这里有一个非常相似,几乎相同的问题:Android webview geoposition database failed to open

我已经完成了大量的谷歌搜索,虽然我看到一些人有同样的问题,但我还没有看到任何解决方案。如果有人需要我提供更多信息,请随时告诉我。

2 个答案:

答案 0 :(得分:0)

所以,这个线程几乎解决了这个问题:

Samsung Galaxy Devices can't use geolocation.getCurrentPosition

简而言之,我使用的是三星Galaxy手机,而三星Galaxy手机似乎与html5地理定位有问题。

答案 1 :(得分:0)

你应该添加这一行:

mWebView.getSettings().setGeolocationDatabasePath(getFilesDir().getPath());

地理位置使用数据库在会话之间保留缓存的位置和权限。 此调用设置数据库的位置。