獲取當前經緯度 和 通過經緯度 得到大致位置的介面
轉載 https://blog.csdn.net/qq_28946307/article/details/51175215
在Android中定位是屬於危險許可權,需要在新增Mainfest.xml中新增。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
- 1
- 2
如果在Android6.0級以上系統,需要 動態的申請許可權,也可以使用封裝好 許可權管理庫。
-
network
它是依靠訊號塔或WiFi來定位的。對應的provider欄位是LocationManager.NETWORK_PROVIDER,是一種低精度,低耗電的初略定位方式。
-
gps
它是依靠GPS來定位的。對應的provider欄位是LocationManager.GPS_PROVIDER,是高精度,高耗電的精準定位方式。
-
passive
被動的獲取定位資訊,通過接受其他APP或service的定位資訊。不過需要這個許可權ACCESS_FINE_LOCATION。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- 1
-
fused
Google已經將這個定位方式hide了。
主函式程式碼//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//首先我們通過獲取系統的位置管理器的例項
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//這一句使系統提示加上的,類似於判斷啥的,我也不太懂,寫下面程式碼的時候會自動提示你加上
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}
//然後我們通過位置管理器獲取當前可用的位置提供器
List<String> prividers = locationManager.getProviders(true);
Location location = null;
String privider = null;
if (prividers.contains(LocationManager.NETWORK_PROVIDER)) {
privider = LocationManager.NETWORK_PROVIDER;
} else if (prividers.contains(LocationManager.GPS_PROVIDER)) {
privider = LocationManager.GPS_PROVIDER;
} else {
Toast.makeText(MainActivity.this, "當前沒有可用的位置提供者", Toast.LENGTH_SHORT).show();
return;
}
//根據獲取的位置提供器獲取當前的位置例項
location = locationManager.getLastKnownLocation(privider);
if (location != null) {
showLocation(location);
}
//例項化位置提供器的監聽物件,並實現其中的方法
locationListener = new LocationListener() {
//我們只需要注意這個方法,就是當位置發生變化時,我們的邏輯處理
@Override
public void onLocationChanged(Location location) {
showLocation(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
//這個方法很重要,設定位置變化的監聽事件,包含四個引數
//第一個引數是位置提供器的型別
//第二個引數是監聽位置變化的時間間隔
//第三個引數是監聽位置變化的距離,以米為單位
//第四個引數是我們例項化的監聽器物件
locationManager.requestLocationUpdates(privider, 5000, 1, locationListener);
得到經緯度的方法 和 銷燬方法///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void showLocation(Location location) {
String address = "經度:" + location.getLatitude() + "\n" + "緯度:" + location.getLongitude();
//這個是把經緯度賦給TextView 注意 經緯度可能是反的
textView.setText(address);
Toast.makeText(MainActivity.this, "更新啦", Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
//最後別忘了,在程序銷燬的時候,將位置監聽物件移除
super.onDestroy();
if (locationListener != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}
locationManager.removeUpdates(locationListener);
}
}
傳經緯度得到大致位置的介面///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
轉載 https://blog.csdn.net/u013790519/article/details/50417417
先傳緯度再傳經度
http://maps.google.cn/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true,language=zh-CN