Android WebView支持定位

2019-11-26  本文已影响0人  静水红阳

问题描述

部分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。

上一篇 下一篇

猜你喜欢

热点阅读