猿问

android webview地理定位

android webview地理定位

我必须在a中检索用户的位置WebView。我使用以下Javascript执行此操作:

function getLocation() {
   navigator.geolocation.getCurrentPosition(displayLocation, handleError);}

但是权限请求弹出窗口永远不会打开。

我设置了这些设置:

ws.setJavaScriptEnabled(true);ws.setGeolocationEnabled(true);ws.setJavaScriptCanOpenWindowsAutomatically(true);

从一个位置访问用户位置的正确方法是WebView什么?


慕桂英546537
浏览 658回答 3
3回答

富国沪深

必须在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() );

小怪兽爱吃肉

您是否在清单中声明了该许可?<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" />

浮云间

接受或拒绝用户位置的对话框由程序员设计:D。正如Chris Cashwell所说,你只需使用这样的回调:webview.setWebChromeClient(new&nbsp;WebChromeClient(){ &nbsp;&nbsp;public&nbsp;void&nbsp;onGeolocationPermissionsShowPrompt(String&nbsp;origin,&nbsp;GeolocationPermissions.Callback&nbsp;callback)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;callback.invoke(String&nbsp;origin,&nbsp;boolean&nbsp;allow,&nbsp;boolean&nbsp;remember); &nbsp;&nbsp;&nbsp;&nbsp;callback.invoke(origin,&nbsp;true,&nbsp;false); &nbsp;&nbsp;}}在某些情况下,HTML5需要使用存储,您必须启用一些属性,以便webview具有正常运行的完全访问权限。&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;HTML5&nbsp;API&nbsp;flags &nbsp;&nbsp;&nbsp;&nbsp;webView.getSettings().setAppCacheEnabled(true); &nbsp;&nbsp;&nbsp;&nbsp;webView.getSettings().setDatabaseEnabled(true); &nbsp;&nbsp;&nbsp;&nbsp;webView.getSettings().setDomStorageEnabled(true);
随时随地看视频慕课网APP

相关分类

Android
我要回答