3 回答

TA貢獻1790條經驗 獲得超9個贊
必須在
WebView
使用中啟用JavaScriptWebSettings.setJavaScriptEnabled(true);
該應用需要許可
ACCESS_FINE_LOCATION
在
WebView
必須使用自定義WebChromeClient
它實現WebChromeClient.onGeolocationPermissionsShowPrompt()
。該方法被調用WebView
以獲得向JavaScript公開用戶位置的許可。(對于瀏覽器,我們向用戶顯示提示。)默認實現不執行任何操作,因此永遠不會獲得權限,并且該位置永遠不會傳遞給JavaScript。一個總是授予權限的簡單實現是......webView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); }});
地理定位使用數據庫在會話之間保留緩存的位置和權限。使用設置數據庫的位置WebSettings.setGeolocationDatabasePath(...)
。如果未設置數據庫的位置,則永久存儲將不可用,但Geolocation將繼續正常運行。要設置數據庫的位置,請使用...
webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );

TA貢獻1852條經驗 獲得超1個贊
您是否在清單中聲明了該許可?
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
您可能還需要聲明其他位置權限,例如:
<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" />

TA貢獻1829條經驗 獲得超4個贊
接受或拒絕用戶位置的對話框由程序員設計:D。正如Chris Cashwell所說,你只需使用這樣的回調:
webview.setWebChromeClient(new WebChromeClient(){ public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { // callback.invoke(String origin, boolean allow, boolean remember); callback.invoke(origin, true, false); }}
在某些情況下,HTML5需要使用存儲,您必須啟用一些屬性,以便webview具有正常運行的完全訪問權限。
// HTML5 API flags webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setDomStorageEnabled(true);
- 3 回答
- 0 關注
- 682 瀏覽
添加回答
舉報