1. 程式人生 > >獲取當前經緯度 和 通過經緯度 得到大致位置的介面

獲取當前經緯度 和 通過經緯度 得到大致位置的介面


轉載  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了。

安卓中有四種原生定位方式private LocationManager locationManager;privateLocationListener locationListener;

主函式程式碼//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 //首先我們通過獲取系統的位置管理器的例項
        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