欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android关于WebView中无法定位的问题解决

程序员文章站 2023-11-16 16:13:22
之前碰到个问题,使用webview的时候无法定位,最近19大没法墙,只能去百度逛逛,发现有人说要这么做 websettings settings = wb...

之前碰到个问题,使用webview的时候无法定位,最近19大没法墙,只能去百度逛逛,发现有人说要这么做

    websettings settings = wbcontent.getsettings();
    settings.setjavascriptenabled(true);
    settings.setjavascriptcanopenwindowsautomatically(true);
    settings.setgeolocationenabled(true);
    settings.setdomstorageenabled(true);

    settings.setdatabaseenabled(true);
    string dir = this.getapplicationcontext().getdir("database", context.mode_private).getpath();
    settings.setgeolocationdatabasepath(dir);
    webchromeclient = new webchromeclient(){
      @override
      public void ongeolocationpermissionsshowprompt(string origin, geolocationpermissions.callback callback) {
        callback.invoke(origin, true, true);
        super.ongeolocationpermissionsshowprompt(origin, callback);
      }
    };
    wbcontent.setwebchromeclient(webchromeclient);
    wbcontent.loadurl("https://xxxxxxxxxxxxxxxxxxxxxxxx");

网上很多地方说加了这段代码之后就可以正常定位了,然而我加上之后还是没有什么卵用。没办法,百度就是没谷歌给力。
看了下日志,说我没有获取到权限,但是代码中的callback.invoke(origin, true, true);是获取定位权限的操作啊。

我想了想,突然想到了6.0之后要动态申请权限。

我这样加入动态申请权限的代码

if (build.version.sdk_int >= 23) {
      int checkpermission = contextcompat.checkselfpermission(locationtestactivity.this, manifest.permission.access_coarse_location);
      if (checkpermission != packagemanager.permission_granted) {
        activitycompat.requestpermissions(locationtestactivity.this, new string[]{manifest.permission.access_coarse_location}, 1);
        activitycompat.requestpermissions(locationtestactivity.this, new string[]{manifest.permission.access_fine_location}, 1);
      }else {
        wbcontent.loadurl("https://xxxxxxxxxxxxxxxxxxxxxxxx");
      }
    }

发现这样就能正常的获取到定位的结果,有的人可能不知道要在哪里动态申请,其实这要看你具体的流程,你也可以在跳转到这个页面的时候申请,也可以在展示网页的时候申请。

最后说一下,ongeolocationpermissionsshowprompt这个方法只会调用一次,和动态申请权限一样,只会在第一次调用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。