电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android通過(guò)原生方式獲取經(jīng)緯度與城市信息的方法

瀏覽:2日期:2022-09-23 09:02:08

一、概述

在項(xiàng)目中需要獲取用戶所在位置的經(jīng)緯度和城市上送給風(fēng)控系統(tǒng)。一般來(lái)說(shuō),定位有兩種方式:

用第三方SDK定位,如百度地圖、高德地圖、谷歌地圖; 用Android原生SDK中的api定位;

本文講述定位的第二種方式--用Android原生的SDK中的api定位,如果項(xiàng)目定位要求較高還是建議使用第三方地圖庫(kù)。

二、Android原生SDK中的api定位

Android原生方式獲取經(jīng)緯度兩種定位方式:GPS定位和Wifi定位

GPS定位相比Wifi定位更精準(zhǔn)且可在無(wú)網(wǎng)絡(luò)情況下使用,但在室內(nèi)基本暴斃無(wú)法使用。 WiFi定位沒(méi)有室內(nèi)外限制,也不需要開啟GPS但需要聯(lián)網(wǎng)。但測(cè)試發(fā)現(xiàn)WiFi定位時(shí)onLocationChanged函數(shù)(用于監(jiān)聽經(jīng)緯度變化)觸發(fā)間隔無(wú)法小于30s。

示例代碼如下:

public class TestLocationActivity extends AppCompatActivity { public static final int LOCATION_CODE = 301; private LocationManager locationManager; private String locationProvider = null; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); getLocation(); } private void getLocation(){ //1.獲取位置管理器 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //2.獲取位置提供器,GPS或是NetWork List<String> providers = locationManager.getProviders(true); if (providers.contains(LocationManager.GPS_PROVIDER)) { //如果是GPS locationProvider = LocationManager.GPS_PROVIDER; Log.v('TAG', '定位方式GPS'); } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) { //如果是Network locationProvider = LocationManager.NETWORK_PROVIDER; Log.v('TAG', '定位方式Network'); }else { Toast.makeText(this, '沒(méi)有可用的位置提供器', Toast.LENGTH_SHORT).show(); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //獲取權(quán)限(如果沒(méi)有開啟權(quán)限,會(huì)彈出對(duì)話框,詢問(wèn)是否開啟權(quán)限) if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //請(qǐng)求權(quán)限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE); } else { //3.獲取上次的位置,一般第一次運(yùn)行,此值為null Location location = locationManager.getLastKnownLocation(locationProvider); if (location!=null){ Toast.makeText(this, location.getLongitude() + ' ' + location.getLatitude() + '',Toast.LENGTH_SHORT).show(); Log.v('TAG', '獲取上次的位置-經(jīng)緯度:'+location.getLongitude()+' '+location.getLatitude()); getAddress(location); }else{ //監(jiān)視地理位置變化,第二個(gè)和第三個(gè)參數(shù)分別為更新的最短時(shí)間minTime和最短距離minDistace locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener); } } } else { Location location = locationManager.getLastKnownLocation(locationProvider); if (location!=null){ Toast.makeText(this, location.getLongitude() + ' ' + location.getLatitude() + '', Toast.LENGTH_SHORT).show(); Log.v('TAG', '獲取上次的位置-經(jīng)緯度:'+location.getLongitude()+' '+location.getLatitude()); getAddress(location); }else{ //監(jiān)視地理位置變化,第二個(gè)和第三個(gè)參數(shù)分別為更新的最短時(shí)間minTime和最短距離minDistace locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener); } } } public LocationListener locationListener = new LocationListener() { // Provider的狀態(tài)在可用、暫時(shí)不可用和無(wú)服務(wù)三個(gè)狀態(tài)直接切換時(shí)觸發(fā)此函數(shù) @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // Provider被enable時(shí)觸發(fā)此函數(shù),比如GPS被打開 @Override public void onProviderEnabled(String provider) { } // Provider被disable時(shí)觸發(fā)此函數(shù),比如GPS被關(guān)閉 @Override public void onProviderDisabled(String provider) { } //當(dāng)坐標(biāo)改變時(shí)觸發(fā)此函數(shù),如果Provider傳進(jìn)相同的坐標(biāo),它就不會(huì)被觸發(fā) @Override public void onLocationChanged(Location location) { if (location != null) { //如果位置發(fā)生變化,重新顯示地理位置經(jīng)緯度 Toast.makeText(TestLocationActivity.this, location.getLongitude() + ' ' +location.getLatitude() + '', Toast.LENGTH_SHORT).show(); Log.v('TAG', '監(jiān)視地理位置變化-經(jīng)緯度:'+location.getLongitude()+' '+location.getLatitude()); } } }; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case LOCATION_CODE: if(grantResults.length > 0 && grantResults[0] == getPackageManager().PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, '申請(qǐng)權(quán)限', Toast.LENGTH_LONG).show(); try { List<String> providers = locationManager.getProviders(true); if (providers.contains(LocationManager.NETWORK_PROVIDER)) { //如果是Network locationProvider = LocationManager.NETWORK_PROVIDER; }else if (providers.contains(LocationManager.GPS_PROVIDER)) { //如果是GPS locationProvider = LocationManager.GPS_PROVIDER; } Location location = locationManager.getLastKnownLocation(locationProvider); if (location!=null){ Toast.makeText(this, location.getLongitude() + ' ' + location.getLatitude() + '', Toast.LENGTH_SHORT).show(); Log.v('TAG', '獲取上次的位置-經(jīng)緯度:'+location.getLongitude()+' '+location.getLatitude()); }else{ // 監(jiān)視地理位置變化,第二個(gè)和第三個(gè)參數(shù)分別為更新的最短時(shí)間minTime和最短距離minDistace locationManager.requestLocationUpdates(locationProvider, 0, 0,locationListener); } }catch (SecurityException e){ e.printStackTrace(); } } else { Toast.makeText(this, '缺少權(quán)限', Toast.LENGTH_LONG).show(); finish(); } break; } } //獲取地址信息:城市、街道等信息 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); Toast.makeText(this, '獲取地址信息:'+result.toString(), Toast.LENGTH_LONG).show(); Log.v('TAG', '獲取地址信息:'+result.toString()); } } catch (Exception e) { e.printStackTrace(); } return result; } @Override protected void onDestroy() { super.onDestroy(); locationManager.removeUpdates(locationListener); }}

在AndroidManifest.xml加權(quán)限

<!-- 粗略的位置權(quán)限 --><uses-permission android:name='android.permission.ACCESS_COARSE_LOCATION'></uses-permission> <!-- 精確的位置權(quán)限 --><uses-permission android:name='android.permission.ACCESS_FINE_LOCATION'></uses-permission><uses-permission android:name='android.permission.INTERNET'></uses-permission>

三、總結(jié)

首先將手機(jī)定位服務(wù)設(shè)置,調(diào)到下圖所示:

Android通過(guò)原生方式獲取經(jīng)緯度與城市信息的方法

這可能會(huì)獲取不到經(jīng)緯度。為什么在網(wǎng)絡(luò)和GPS都可用的情況下只執(zhí)行GPS而不是網(wǎng)絡(luò)?也許是從精確度考慮的,但是走GPS進(jìn)入監(jiān)聽的listener后,不會(huì)執(zhí)行onLocationChanged()方法,因?yàn)槲沂窃谑覂?nèi),沒(méi)有移動(dòng),所以如果你獲取不到經(jīng)緯度,就要將定位服務(wù)調(diào)到僅使用網(wǎng)絡(luò)定位或者關(guān)閉手機(jī)GPS這樣就可以獲取到了。

Android通過(guò)原生方式獲取經(jīng)緯度與城市信息的方法

總結(jié)

到此這篇關(guān)于Android通過(guò)原生方式獲取經(jīng)緯度與城市信息的文章就介紹到這了,更多相關(guān)Android原生獲取經(jīng)緯度與城市信息內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 方源木业官网-四川木门-全国木门专业品牌 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 智慧旅游_智慧景区_微景通-智慧旅游景区解决方案提供商 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 广州各区危化证办理_危险化学品经营许可证代办| 顺辉瓷砖-大国品牌-中国顺辉 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 南京交通事故律师-专打交通事故的南京律师 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 信阳市建筑勘察设计研究院有限公司 |