android webview 定位问题

作者: 天天星期天 | 来源:发表于2017-10-30 16:34 被阅读641次

最近在做安卓的网页开发。有一个页面需要用到定位,但是一直定位获取失败。很难过。网上教程也很多,但是无一例外全部失败。最后老夫花了3天时间,呕心沥血,终于研制出了解决方案。
三步走战略:
一、获取权限
android 6.0 以后,需要动态的获取位置或者存储权限,按照各自的爱好放置位置。我是应用开启初始化的时候,放在MainActivity中的OnCreate方法里。

 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getApplicationContext(),"没有权限,请手动开启定位权限",Toast.LENGTH_SHORT).show();
            // 申请一个(或多个)权限,并提供用于回调返回的获取码(用户定义)
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
            return false;
   }

二、webview setting 设置(复制了别人代码)

WebView webView = (WebView)findViewById(R.id.webview);  
WebSettings webSettings = webView.getSettings();  
  
//webview支持js脚本  
webSettings.setJavaScriptEnabled(true);  
  
//启用数据库    
webSettings.setDatabaseEnabled(true);      
  
//设置定位的数据库路径    
String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();   
webSettings.setGeolocationDatabasePath(dir);     
  
//启用地理定位  
webSettings.setGeolocationEnabled(true);    
  
//开启DomStorage缓存  
webSettings.setDomStorageEnabled(true)    
  
//配置权限  
webView.setWebChromeClient(new WebChromeClient() {  
  @Override  
  public void onReceivedIcon(WebView view, Bitmap icon) {  
     super.onReceivedIcon(view, icon);  
  
}  
  
@Override  
public void onGeolocationPermissionsShowPrompt(String origin,Callback callback) {  
  callback.invoke(origin, true, false);    
  super.onGeolocationPermissionsShowPrompt(origin, callback);  
  
}  
}); 

三 网络权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

网上的教程到这里就结束了。一般都会告诉你,朋友你定位能用了。然而我并不能用啊!!!
检查来检查去。没啥毛病啊。一模一样啊!

四 build gradle (我用的是as )修改
自己app的build.gradle 里面一个targetSdkVersion 23 (为什么写23 高德地图告诉我的)

然后你的工程地图能用了。
附上参考的网站:http://blog.csdn.net/cheunjq/article/details/54729875

相关文章

  • android webview 定位问题

    最近在做安卓的网页开发。有一个页面需要用到定位,但是一直定位获取失败。很难过。网上教程也很多,但是无一例外全部失败...

  • Android使用WebView定位问题

    最近遇到了一个问题,有一个需求是使用 WebView 来加载一个网页url,H5通过js来获取位置定位信息。以前也...

  • Android使用WebView定位问题

    最近遇到了一个问题,有一个需求是使用 WebView 来加载一个网页url,H5通过js来获取位置定位信息。以前也...

  • Appium自动化测试error: Chromedriver:

    Appium Android WebView切换context为WebView时卡住。 问题描述: Android...

  • Adnroid WebView

    Android webView 注意问题 //解决图片不显示 webView.getSettings().setB...

  • WebView

    Android:你不知道的 WebView 使用漏洞 Android WebView控件跨域访问高危漏洞问题解析 ...

  • 社区RN项目步骤(二)~还原psd页面,处理技术点-IOS显示不

    1.这个问题还是比较奇葩的,android可以正常显示高德地图在webview中但是定位不到,ios直接显示一片空...

  • 腾讯x5和系统webview

    腾讯x5 Android的 webview 影响canvas: 解决webview跨域问题:setAllowUni...

  • Android WebView支持定位

    问题描述 部分H5界面会通过JS代码获取位置信息,这个界面在手机浏览器上能正常获取到位置,但是通过WebView打...

  • 控件总结

    一、WebView控件1.Android 解决WebView重定向问题 二,RecyclerView控件1.Rec...

网友评论

  • cumtwjc:灰常感谢 解决了我的问题 第四点太给力了
  • 甜甜的清风啊:顶,这个第四步太关键了,你这里应该突出一点,上面三点大家都说烂了。
    看到的话能给我说一下你看到第四步的地方么,最好有链接。
    现在这个方法感觉有点治标不治本啊~!
    e8566428a528:@爱清风 大神能给讲讲SDK24之后怎么实现setGeolocationDatabasePath吗
    甜甜的清风啊:知道了,原因就是 setGeolocationDatabasePath() 这个方法在 API level 24 的时候被废弃了需要自己去管理这个数据库,在这之前系统实现好了的~!
    天天星期天:@爱清风 这个问题我也困扰了将近一星期。看得地方是在高德地图的官网,但也没明说,我只是猜测试着替换,结果就可以用了。

本文标题:android webview 定位问题

本文链接:https://www.haomeiwen.com/subject/rjxmpxtx.html