Android开发之原生定位的方法(GPS,网络定位)
生活随笔
收集整理的這篇文章主要介紹了
Android开发之原生定位的方法(GPS,网络定位)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
話不多說,直接代碼:
注意:此經緯度和第三方地圖的經緯度不是一個經緯度
例如此經緯度longitude:116.426676 ?latitude:39.932821精確位置40.0海拔0.0
在原生GPS代表地址:北京市北京市東城區東四十條3號中匯廣場港澳中心-商務樓
但是在百度地圖代表地址:北京市東城區東四三條乙69號
為什么呢?因為經緯度換算不一樣導致的
package com.qfy.locationdemo;import android.location.Address; import android.location.Criteria; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast;import java.io.IOException; import java.util.List;public class MainActivity extends AppCompatActivity {private LocationManager locationManager;private TextView tvLongitude;private MyLocationListener myLocationListener;private TextView locationChange;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvLongitude = (TextView) findViewById(R.id.tv_longitude);locationChange = (TextView) findViewById(R.id.location_change); // locationChange.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // new Thread() { // @Override // public void run() { // String location = GetHuoxingLocation.getLocation(MainActivity.this); // tvLongitude.setText(location); // } // }.start(); // } // });//1.獲取位置的管理者locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);//2.獲取定位方式//2.1獲取所有的定位方式,true:表示返回所有可用定位方式List<String> providers = locationManager.getProviders(true);for (String string : providers) {System.out.println(string);}//2.2獲取最佳的定位方式Criteria criteria = new Criteria();criteria.setAltitudeRequired(true);//設置是否可以定位海拔,如果設置定位海拔,返回一定是gps//criteria : 設置定位屬性//enabledOnly : true如果定位可用就返回String bestProvider = locationManager.getBestProvider(criteria, false);System.out.println("最佳的定位方式:" + bestProvider);//3.定位myLocationListener = new MyLocationListener();//provider : 定位的方式//minTime : 定位的最小時間間隔//minDistance : 定位最小的間隔距離//LocationListener : 定位監聽locationManager.requestLocationUpdates("network", 0, 0, myLocationListener);}private class MyLocationListener implements LocationListener {private String latLongString;//當定位位置改變的調用的方法//Location : 當前的位置@Overridepublic void onLocationChanged(Location location) {float accuracy = location.getAccuracy();//獲取精確位置double altitude = location.getAltitude();//獲取海拔final double latitude = location.getLatitude();//獲取緯度,平行final double longitude = location.getLongitude();//獲取經度,垂直tvLongitude.setText("longitude:" + longitude + " latitude:" + latitude + "精確位置" + accuracy + "海拔" + altitude);Log.e("打印經緯度:", "longitude:" + longitude + " latitude:" + latitude + "精確位置" + accuracy + "海拔" + altitude);new Thread(new Runnable() {@Overridepublic void run() {List<Address> addsList = null;Geocoder geocoder = new Geocoder(MainActivity.this);try {addsList = geocoder.getFromLocation(latitude, longitude, 10);//得到的位置可能有多個當前只取其中一個Log.e("打印拿到的城市", addsList.toString());} catch (IOException e) {e.printStackTrace();}if (addsList != null && addsList.size() > 0) {for (int i = 0; i < addsList.size(); i++) {final Address ads = addsList.get(i);latLongString = ads.getLocality();//拿到城市 // latLongString = ads.getAddressLine(0);//拿到地址runOnUiThread(new Runnable() {@Overridepublic void run() {Log.e("打印拿到的城市的地址", latLongString + ads.getAddressLine(0) + ads.getAddressLine(1) + ads.getAddressLine(4));locationChange.setText(latLongString + ads.getAddressLine(0) + ads.getAddressLine(1));Toast.makeText(MainActivity.this, "當前所在的城市為" + latLongString + ads.getAddressLine(0) + ads.getAddressLine(4) + ads.getAddressLine(1), Toast.LENGTH_LONG).show();}});}}}}).start();}//當定位狀態發生改變的時候調用的方式@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}//當定位可用的時候調用的方法@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}//當定位不可用的時候調用的方法@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}}@Overrideprotected void onDestroy() {super.onDestroy();locationManager.removeUpdates(myLocationListener);//關閉gps,但是高版本中規定打開和關閉gps必須由用戶自己主觀的去實現,代碼已經不允許進行操作} }咱們來看下定位的效果圖:
?
如果需要源碼可點擊下面下載:
源碼下載
總結
以上是生活随笔為你收集整理的Android开发之原生定位的方法(GPS,网络定位)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李杰谈一加Ace 2V:或许会是同档位中
- 下一篇: 教你用iPhone 14系列拍摄美食 让