问题描述
部分H5界面会通过JS代码获取位置信息,这个界面在手机浏览器上能正常获取到位置,但是通过WebView打开时却不能获取到具体的位置,查询了部分文档,发现如果要WebView支持H5获取定位,需要做如下的改动。
具体步骤
一、添加定位权限
获取位置首先需要获取定位权限,示例代码如下:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
当然Android6.0以上需要动态获取权限,可以在进入到WebView页面的时候先获取权限,获取权限之后再调用WebView.loadUrl()
。
二、WebView Setting配置
在WebSetting中需要WebView支持JS和location获取,示例代码如下:
webSettings?.javaScriptEnabled = true //支持js
webSettings?.setGeolocationEnabled(true) //支持获取位置信息
除此之外,还需要在重写webChromeClient
中的onGeolocationPermissionsShowPrompt()
方法 ,使其获取位置信息,示例代码如下:
override fun onGeolocationPermissionsShowPrompt(
origin: String?,
callback: GeolocationPermissions.Callback?
) {
//获取位置信息
callback?.invoke(origin,true,true)
super.onGeolocationPermissionsShowPrompt(origin, callback)
}
其他问题
Http无法获取到位置
在测试之后发现http开头的网址无法获取到信息,但是https的网址却能够获取到,查阅官方文档之后得到了如下结论:
——对于Android N之后对于非安全源地址将会自动拒绝获取位置。
因此对于http的网址想要获取具体的位置信息,需要将Http升级到Https。
网友评论