日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android通過原生方式獲取經緯度與城市信息的方法

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

一、概述

在項目中需要獲取用戶所在位置的經緯度和城市上送給風控系統。一般來說,定位有兩種方式:

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

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

二、Android原生SDK中的api定位

Android原生方式獲取經緯度兩種定位方式:GPS定位和Wifi定位

GPS定位相比Wifi定位更精準且可在無網絡情況下使用,但在室內基本暴斃無法使用。 WiFi定位沒有室內外限制,也不需要開啟GPS但需要聯網。但測試發現WiFi定位時onLocationChanged函數(用于監聽經緯度變化)觸發間隔無法小于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, '沒有可用的位置提供器', Toast.LENGTH_SHORT).show(); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //獲取權限(如果沒有開啟權限,會彈出對話框,詢問是否開啟權限) if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //請求權限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE); } else { //3.獲取上次的位置,一般第一次運行,此值為null Location location = locationManager.getLastKnownLocation(locationProvider); if (location!=null){ Toast.makeText(this, location.getLongitude() + ' ' + location.getLatitude() + '',Toast.LENGTH_SHORT).show(); Log.v('TAG', '獲取上次的位置-經緯度:'+location.getLongitude()+' '+location.getLatitude()); getAddress(location); }else{ //監視地理位置變化,第二個和第三個參數分別為更新的最短時間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', '獲取上次的位置-經緯度:'+location.getLongitude()+' '+location.getLatitude()); getAddress(location); }else{ //監視地理位置變化,第二個和第三個參數分別為更新的最短時間minTime和最短距離minDistace locationManager.requestLocationUpdates(locationProvider, 3000, 1,locationListener); } } } public LocationListener locationListener = new LocationListener() { // Provider的狀態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // Provider被enable時觸發此函數,比如GPS被打開 @Override public void onProviderEnabled(String provider) { } // Provider被disable時觸發此函數,比如GPS被關閉 @Override public void onProviderDisabled(String provider) { } //當坐標改變時觸發此函數,如果Provider傳進相同的坐標,它就不會被觸發 @Override public void onLocationChanged(Location location) { if (location != null) { //如果位置發生變化,重新顯示地理位置經緯度 Toast.makeText(TestLocationActivity.this, location.getLongitude() + ' ' +location.getLatitude() + '', Toast.LENGTH_SHORT).show(); Log.v('TAG', '監視地理位置變化-經緯度:'+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, '申請權限', 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', '獲取上次的位置-經緯度:'+location.getLongitude()+' '+location.getLatitude()); }else{ // 監視地理位置變化,第二個和第三個參數分別為更新的最短時間minTime和最短距離minDistace locationManager.requestLocationUpdates(locationProvider, 0, 0,locationListener); } }catch (SecurityException e){ e.printStackTrace(); } } else { Toast.makeText(this, '缺少權限', 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加權限

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

三、總結

首先將手機定位服務設置,調到下圖所示:

Android通過原生方式獲取經緯度與城市信息的方法

這可能會獲取不到經緯度。為什么在網絡和GPS都可用的情況下只執行GPS而不是網絡?也許是從精確度考慮的,但是走GPS進入監聽的listener后,不會執行onLocationChanged()方法,因為我是在室內,沒有移動,所以如果你獲取不到經緯度,就要將定位服務調到僅使用網絡定位或者關閉手機GPS這樣就可以獲取到了。

Android通過原生方式獲取經緯度與城市信息的方法

總結

到此這篇關于Android通過原生方式獲取經緯度與城市信息的文章就介紹到這了,更多相關Android原生獲取經緯度與城市信息內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久不见久久见免费视频7 | 亚洲va中文在线播放免费| 欧美 日韩 国产精品免费观看| 日韩专区在线视频| 久久久久蜜桃| 精品一区二区男人吃奶 | 黄色网一区二区| 日本欧美大码aⅴ在线播放| 精品国产亚洲日本| 国产欧美一区二区三区米奇| 中文字幕乱码亚洲无线精品一区| 婷婷国产精品| 欧美一区二区三区高清视频| 麻豆视频久久| 精品国产三区在线| 国产精品二区影院| 国产精品任我爽爆在线播放| 亚洲精一区二区三区| 另类国产ts人妖高潮视频| 欧美aa国产视频| 国产精品99一区二区| 成人影视亚洲图片在线| 狠狠久久伊人| 美女视频一区在线观看| 精品中文在线| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 精品免费av| 久久久国产精品一区二区中文| 欧美色图国产精品| 国产毛片精品| 国产精品videossex| 亚洲午夜黄色| 国产视频一区欧美| 日本综合字幕| 一区二区亚洲精品| 四虎成人精品一区二区免费网站| 日本一区免费网站| 免费在线成人| 91精品婷婷色在线观看| 蜜乳av另类精品一区二区| 亚洲精选成人| 影院欧美亚洲| 亚洲二区在线| 9国产精品视频| 精品精品久久| 欧美国产专区| 日韩中文字幕一区二区高清99| 影院欧美亚洲| 国内不卡的一区二区三区中文字幕| 在线视频日韩| 亚洲精品综合| 亚洲免费婷婷| 一区二区自拍| 久久不见久久见中文字幕免费| 日韩精品dvd| 综合色就爱涩涩涩综合婷婷| 国产成人1区| 一区二区三区网站| 九色porny丨国产首页在线| 日本不卡视频在线观看| 里番精品3d一二三区| 亚洲一区欧美激情| 精品午夜av| 蜜桃久久久久久久| 欧美13videosex性极品| 91精品丝袜国产高跟在线| 欧美 日韩 国产一区二区在线视频 | 国产精品社区| 国产 日韩 欧美一区| 久久精品一区二区三区中文字幕| 国产精品av久久久久久麻豆网| 国产日韩1区| 日韩精品国产欧美| 亚洲v天堂v手机在线| 夜久久久久久| 在线观看精品| 日韩精品看片| 色婷婷久久久| 久久国产欧美| 99久久精品国产亚洲精品| 日韩一区二区三区免费播放| 卡一卡二国产精品| 九九99久久精品在免费线bt| 热久久久久久| 国产精品**亚洲精品| 欧美一级久久| 国产香蕉精品| 久久gogo国模啪啪裸体| 精品一区视频| 欧美天堂视频| 亚洲精品小说| 亚洲一区网站| 色8久久久久| 日本成人在线视频网站| 国产日产精品_国产精品毛片| 欧美一区激情| 精品中文在线| 欧美手机在线| 日韩激情啪啪| 国产成人精品一区二区三区视频| 麻豆国产欧美日韩综合精品二区| 美女在线视频一区| 亚洲成人av观看| 免费日本视频一区| 国产精品mm| 99国产精品| 欧美天堂一区| 人人香蕉久久| 日本在线成人| 色婷婷色综合| 免费观看亚洲天堂| 蜜臀av一区二区三区| 久久精品国产68国产精品亚洲| 国产精品极品在线观看| 午夜电影一区| 影音先锋国产精品| 久久蜜桃精品| 日韩欧美在线中字| 国产一区三区在线播放| 免费一区二区三区在线视频| 日韩av不卡一区二区| 日韩欧美美女在线观看| 日本大胆欧美人术艺术动态| 红桃视频国产精品| 午夜欧美在线| 国产精品婷婷| 蜜臀久久久久久久| 视频一区二区三区中文字幕| 亚洲一级特黄| 欧美久久精品一级c片| 在线天堂资源www在线污| 日韩av自拍| 亚洲视频综合| 久久成人精品| 日韩av网站在线观看| 国产精品久久久久久久久久久久久久久| 国产视频网站一区二区三区| 欧美一区不卡| 日本不卡免费高清视频在线| 欧美三区四区| 亚洲精选久久| 韩日一区二区| 激情五月综合网| 蜜桃久久av一区| 国产精品xxx在线观看| 国产精品一区三区在线观看| 免费亚洲婷婷| 亚洲天堂黄色| 日本少妇精品亚洲第一区| 精品日本视频| 国产一区成人| 欧美黑人做爰爽爽爽| 久久久一二三| 日韩av网站在线免费观看| 成人亚洲一区二区| 亚洲伊人精品酒店| 国产一区二区三区久久| 在线一区免费观看| 久久av网址| 欧美一区=区| 国产欧美一区二区精品久久久| 欧美www视频在线观看| 天堂av在线一区| 理论片午夜视频在线观看| 久久香蕉精品| 99久久激情| 首页国产欧美久久| 久久免费影院| 蜜臀av一区二区三区| 日本久久综合| 欧美在线观看天堂一区二区三区| 久久精品导航| 国产探花一区| 久久av一区| 激情婷婷亚洲| 国产激情精品一区二区三区| 午夜欧美精品久久久久久久| 麻豆国产一区| 欧美私人啪啪vps| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久一本精品| 国产一区二区三区四区五区传媒| 午夜天堂精品久久久久| 欧美日韩国产高清| 人人精品亚洲| 亚洲黄色中文字幕| 你懂的亚洲视频| 国产伦乱精品| 国产精品一区二区免费福利视频| 亚洲网址在线观看| 亚洲视频综合| 亚洲午夜视频| 99在线|亚洲一区二区| 不卡一区综合视频| 亚洲国内欧美| 中文日韩欧美| 日韩福利视频导航| 国产精品主播| www.51av欧美视频| 成人免费电影网址|