android定位并获取城市
在项目中需要定位当前用户所在城市,然后根据不同城市返回不同的数据。一般来说,定位有两种方式,1、用第三方的定位sdk,如百度定位;2、用android自带的sdk中的api定位。
一、用百度SDK定位。这个具体操作见百度开发者平台。
二、用android自带的SDK定位。一般情况下,获取经纬度是很简单,再根据经纬度获取城市,这个获取城市也有多种方法。
定位获取经纬度:
private Location getLocation() {//获取位置管理服务 //查找服务信息 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); //定位精度: 最高 criteria.setAltitudeRequired(false); //海拔信息:不需要 criteria.setBearingRequired(false); //方位信息: 不需要 criteria.setCostAllowed(true); //是否允许付费 criteria.setPowerRequirement(Criteria.POWER_LOW); //耗电量: 低功耗 // String provider = myLocationManager.getBestProvider(criteria, true); //获取GPS信息 // myLocationManager.requestLocationUpdates(provider,2000,5,locationListener); // Log.e("provider", provider); // List<String> list = myLocationManager.getAllProviders(); // Log.e("provider", list.toString()); // Location gpsLocation = null; Location netLocation = null; myLocationManager.addGpsStatusListener(myListener); if (netWorkIsOpen()) {//2000代表每2000毫秒更新一次,5代表每5秒更新一次 myLocationManager.requestLocationUpdates("network", 2000, 5, locationListener); netLocation = myLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); }if (gpsIsOpen()) {myLocationManager.requestLocationUpdates("gps", 2000, 5, locationListener); gpsLocation = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); }if (gpsLocation == null && netLocation == null) {return null; }if (gpsLocation != null && netLocation != null) {if (gpsLocation.getTime() < netLocation.getTime()) {gpsLocation = null; return netLocation; } else {netLocation = null; return gpsLocation; }}if (gpsLocation == null) {return netLocation; } else {return gpsLocation; }}
定位主要有两种方式,GPS和NetWork。以上就是判断哪种方式可用就用哪个。
private boolean gpsIsOpen() {boolean isOpen = true; if (!myLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {//没有开启GPS isOpen = false; }return isOpen; }private boolean netWorkIsOpen() {boolean netIsOpen = true; if (!myLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {//没有开启网络定位 netIsOpen = false; }return netIsOpen; }
自定义LocationListener
//监听GPS位置改变后得到新的经纬度 private LocationListener locationListener = new LocationListener() {public void onLocationChanged(Location location) {Log.e("location", location.toString() + "...."); // TODO Auto-generated method stub if (location != null) {//获取国家,省份,城市的名称 Log.e("location", location.toString()); // List<Address> m_list = getAddress(location); new MyAsyncExtue().execute(location); // Log.e("str", m_list.toString()); // String city = ""; if (m_list != null && m_list.size() > 0) { city = m_list.get(0).getLocality();//获取城市 } // city = m_list; // show_GPS.setText("location:" + m_list.toString() + "\n" + "城市:" + city + "\n精度:" + location.getLongitude() + "\n纬度:" + location.getLatitude() + "\n定位方式:" + location.getProvider()); } else {show_GPS.setText("获取不到数据"); }}@Override public void onStatusChanged(String provider, int status, Bundle extras) {}@Override public void onProviderEnabled(String provider) {}@Override public void onProviderDisabled(String provider) {}};
其中的Location类就是我们需要获取到的位置信息,可以从中得到经纬度。
根据经纬度获取当前城市名的几种方式如下:(获取城市名需要网络连接,不管是百度定位的SDK,还是我们后面介绍的获取方式)
1.通过服务获取城市名(google或者baidu)
百度:http://api.map.baidu.com/geocoder?output=json&location=23.131427,113.379763&ak=esNPFDwwsXWtsQfw4NMNmur1
google:http://maps.google.com/maps/api/geocode/json?latlng=%2023.131427,113.379763&language=zh-CN&sensor=true
private class MyAsyncExtue extends AsyncTask<Location, Void, String> {@Override protected String doInBackground(Location... params) {HttpClient client = new DefaultHttpClient(); StringBuilder stringBuilder = new StringBuilder(); HttpGet httpGet = new HttpGet("http://api.map.baidu.com/geocoder?output=json&location=23.131427,113.379763&ak=esNPFDwwsXWtsQfw4NMNmur1"); try {HttpResponse response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream inputStream = entity.getContent(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String b; while ((b = bufferedReader.readLine()) != null) {stringBuilder.append(b + "\n"); }inputStream.close(); } catch (IOException e) {e.printStackTrace(); }return stringBuilder.toString(); }@Override protected void onPostExecute(String m_list) {super.onPostExecute(m_list); Log.e("str", m_list.toString()); String city = ""; // if (m_list != null && m_list.size() > 0) { // city = m_list.get(0).getLocality();//获取城市 // } city = m_list; show_GPS.setText("城市:" + city); }}
这个获取到的city是json串,我只是测试是否可行,所以没有解析。
直接用http请求这连接,就会一json的形式返回当前的位置信息。不过google的服务在大陆依旧是不可用的。
2.用andorid的api获取城市。
// 获取地址信息 private List<Address> getAddress(Location location) {List<Address> result = null; try {if (location != null) {Geocoder gc = new Geocoder(this, Locale.getDefault()); result = gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1); }} catch (Exception e) {e.printStackTrace(); }return result; }
getFromLocation这个方法是耗时的,不要放在主线程中。
经测试,以上方法都是可行的。
测试结果截图如下:
android定位并获取城市相关推荐
- android定位:获取当前位置的经纬度
Android定位主要使用的是基于位置服务(Location Based Service)技术,有了 Android 系统作为载体,我们可以利用定位出的位置进行许多丰富多彩的操作,比如定位城市,根据我 ...
- 利用百度地图Android定位SDK获取经纬度
环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...
- Android根据经纬度获取城市名的方法
根据经纬度获取当前城市名的几种方式如下(获取城市名需要网络连接) 1. 通过服务获取城市名 百度: http://api.map.baidu.com/geocoder?output=json& ...
- vue 定位所在地_vue使用高德地图,精确定位ip定位,获取城市、地区位置
初心-杨瑞超个人博客诚邀您加入qq群(IT-程序猿-技术交流群): 757345416丨(IT-程序猿-技术交流2群): 936929828 1.高德地图准备 点进入网址:https://lbs.am ...
- Vue 使用高德地图,精确定位ip定位,获取城市、地区位置
1.高德地图开放平台-注册账号并申请Key 1) 首先,注册开发者账号,成为高德开放平台开发者 2)登陆之后,在进入「应用管理」 页面「创建新应用」 3)为应用添加 Key,「服务平台」一项请选择「 ...
- vue使用高德地图,精确定位ip定位,获取城市、地区位置
1.高德地图准备 点进入网址:https://lbs.amap.com/api/javascript-api/guide/abc/prepare (1)注册开发者账号 (2)进入控制台 (3)申请高德 ...
- android 百度地图获取城市,Android 百度地图获取两点之间的距离和推荐的驾车路线...
//规划路线 Activity实现OnGetRoutePlanResultListener接口 private RoutePlanSearch routePlanSearch; //这里传入 起点L ...
- java编程手机gps定位_GPS 获取Gps定位信息的Android源码实例,通过这个JAVA 目,你可能学会GPS在 手机 238万源代码下载- www.pudn.com...
文件名称: GPS下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 59 KB 上传时间: 2013-04-08 下载次数: 22 详细说明:获取Gps定位信息的A ...
- android 定位服务 耗电吗,关于Android的定位服务
今天因为工作须要,把以前编写的一个GPS测试法度榜样拿出来从新修改了一下.这个法度榜样说起来竽暌剐些汗青了,是我11年编写的,那时刻学了Android开辟没多久,算是一个实验性的作品.如今工作须要,从 ...
最新文章
- __new__ __init__区别
- php大数组循环嵌套的性能优化
- 河南省第十三届ICPC大学生程序设计竞赛 【部分题题解】
- oracle-sql优化-通过分组和缓存减少不必要的读
- 介绍一个好用的Chrome扩展,能高效管理cookie
- python程序题斐波那契数列_Python_经典题_斐波那契数列
- PHP extension mcrypt must be loaded.
- 这就是程序员被大厂偏爱的实力!
- Linux nmon 命令
- 【原理分析】细说SpringBoot的自动装配原理
- Spring IoC 详解(下篇)
- TED | Never, Ever Give Up
- uniapp uni-swipe-action 滑动删除
- ID卡IC卡的复制卡种类介绍
- lumen php命令,lumen控制器调用artisan
- Excel 查找某一列中包含指定字符的单元格
- Ad hoc网络路由协议概述4——按需路由协议(2)AODV协议 (Ad-hoc on-demand distance vector algorithm protocol)
- 方便实用的--股票涨跌停价计算器
- php 当地天气预报,PHP调用全国天气预报数据接口查询天气示例
- Oracle 数据库一键安装,从未如此简单
热门文章
- Python 中的 repr (关键词:Python/repr)
- 阿里云挖矿./trace -r 2 -R 2 --keepalive --no-color --donate-level 1 --max-cpu-usage 10
- 2022年最新中国科学院期刊分区表变化 | 生物类、医学类
- 鸿蒙系统如何下载使用谷歌商店
- 农历置闰新算法:大宇历法
- 记一次NPDP 认证会议,上截图
- MeshCollider渲染面片
- POJ3096.Surprising Strings题解--zhengjun
- C语言 寻找亲密数对
- python泊松分布计算_当λ很大时泊松分布如何计算?