android webview定位权限请求

公司项目混合应用,h5界面用了百度定位,在手机系统浏览器上会弹出定位权限请求框,但在app的webview上就没响应,查看资料,发现还需要实现WebChromeClient类的onGeolocationPermissionsShowPrompt方法,步骤如下:

1、定位权限申明

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_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" />

2、WebView相关设置

    mWebView.getSettings().setGeolocationEnabled(true);

    private WebChromeClient mWebChromeClient = new WebChromeClient() {
        @Override
        public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, true);
        }
    };


    mWebView.setWebChromeClient(mWebChromeClient);

这样完了之后有可能onGeolocationPermissionsShowPrompt不会被调用到,看这段源码说明:

/**
 * Notify the host application that web content from the specified origin
 * is attempting to use the Geolocation API, but no permission state is
 * currently set for that origin. The host application should invoke the
 * specified callback with the desired permission state. See
 * {@link GeolocationPermissions} for details.
 *
 * <p>Note that for applications targeting Android N and later SDKs
 * (API level > {@link android.os.Build.VERSION_CODES#M})
 * this method is only called for requests originating from secure
 * origins such as https. On non-secure origins geolocation requests
 * are automatically denied.</p>
 *
 * @param origin The origin of the web content attempting to use the
 *               Geolocation API.
 * @param callback The callback to use to set the permission state for the
 *                 origin.
 */
public void onGeolocationPermissionsShowPrompt(String origin,
        GeolocationPermissions.Callback callback) {}

意思是,如果targetSdkVersion设置为21以上,同时如果h5不是https开头,该方法会自动拒绝执行。解决办法是把targetSdkVersion设置为21就可以了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值