12

JavaScript Geolocation API を使用する Web サイトがあり、Web ビューで開きたいと考えています。これらのアクセス許可をマニフェスト ファイルに設定しました。

<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

私のアクティビティでは、webview の設定も行いました。

webview.getSettings().setDatabaseEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setGeolocationDatabasePath("/data/data/com.my.app/databases");
webview.getSettings().setGeolocationEnabled(true);

また、javascript ジオロケーション ダイアログも処理しました。

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

地理位置情報自体は機能していますが、地理位置情報をデータベースにキャッシュできません。CachedGeoposition.db に対して単独で実行する必要がありますが、webview を開始すると、次の奇妙な SQLite エラーが発生します。

E/SQLiteLog(22653): (14) cannot open file at line 30174 of [00bb9c9ce4]
E/SQLiteLog(22653): (14) os_unix.c:30174: (2) open(/CachedGeoposition.db) -
D/WebKit  (22653): ERROR:
D/WebKit  (22653): SQLite database failed to load from /CachedGeoposition.db
D/WebKit  (22653): Cause - unable to open database file
D/WebKit  (22653):
D/WebKit  (22653): external/webkit/Source/WebCore/platform/sql/SQLiteDatabase.cp
p(71) : bool WebCore::SQLiteDatabase::open(const WTF::String&, bool)

エクスプローラーで CachedGeoposition.db ファイルの存在を確認すると、常にそこにあり、db のアクセス許可は -rw---------- に設定されています。

データベースが正しく開かない原因となる設定を見逃していませんか? 私はAndroidが初めてで、2日間解決策を見つけようとしています。どんな助けでも大歓迎です。ありがとうございました。

4

3 に答える 3

0

私はこれが古い質問であることを知っていますが、この問題を抱えている人は誰でもこの機能に焦点を当てるのが面白いと思うかもしれません:

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

Geolocation は、データベースを使用して、キャッシュされた位置とアクセス許可をセッション間で保持します。この呼び出しは、データベースの場所を設定します。

固定パスをパラメーターとして設定する代わりに、動的に呼び出して取得する必要があります。

getFilesDir().getPath()
于 2014-08-22T09:21:15.153 に答える
0

この線

D/WebKit (22653): SQLite データベースを /CachedGeoposition.db から読み込めませんでした

は興味深い

WebSettings.setDatabasePath にも適切な DB パスを設定してみてください。これが geo db パスのルートとして使用されている可能性があります。

于 2012-11-01T16:15:49.497 に答える