Android獲取定位經緯度,轉換成地址

public class CustomViewActivity extends AppCompatActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
    }
    private static final String TAG = "CustomViewActivity";
    private LocListener locListener = null;
    /**
     * 點擊獲取地圖
     *
     * @param view
     */
    public void onClick(View view) {
        if (null == locListener) {
            locListener = new LocListener();
        }
        requestLatitudeAndLongtitude(getApplicationContext(), locListener);
    }


    /**
     * 獲取經緯度
     *
     * @param context
     * @return
     */
    public static void requestLatitudeAndLongtitude(Context context, LocationListener locationListener) {
        try {
            final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            // 生成一個Criteria對象
            Criteria criteria = new Criteria();
            // 設置查詢條件
            criteria.setAccuracy(Criteria.ACCURACY_FINE); // 設置準確而非粗糙的精度
            criteria.setPowerRequirement(Criteria.POWER_LOW); // 設置相對省電而非耗電,一般高耗電量會換來更精確的位置信息
            criteria.setAltitudeRequired(false); // 不需要提供海拔信息
            criteria.setSpeedRequired(false); // 不需要速度信息
            criteria.setCostAllowed(false); // 不能產生費用
            // 第一個參數,傳遞criteria對象
            // 第二個參數,若爲false,在所有Provider中尋找,不管該Provider是否處於可用狀態,均使用該Provider。
            // 若爲true,則在所有可用的Provider中尋找。比如GPS處於禁用狀態,則忽略GPS Provider。
            // 1、可用中最好的
            String locationProvider = locationManager.getBestProvider(criteria, true);
            // 2、所有可用的中的第一個
            if (locationProvider == null) {
                List<String> providers = locationManager.getProviders(true);
                if (providers != null && providers.size() > 0) {
                    locationProvider = providers.get(0);
                }
            }
            // 都不支持則直接返回
            if (TextUtils.isEmpty(locationProvider)) {
                return;
            }

            Location location = locationManager.getLastKnownLocation(locationProvider);
            Log.i(TAG, "requestLatitudeAndLongtitude: location 1 =" + location);

            if (location != null) {
                //updateCacheLocation(context, location.getLatitude(), location.getLongitude());

                locationListener.onLocationChanged(location);
            } else {
                locationManager.requestLocationUpdates(locationProvider, 1000 * 60 * 60, 1000, locationListener);

            }
        } catch (Exception e) {
            // LogUtils.d("---location--- location : "+e.getMessage());
        }
    }

    /**
     * 獲取位置後監聽
     */
    private class LocListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            String locationAddress = getLocationAddress(location);
            //TODO:當前地址爲:locationAddress="北京市海淀區華奧飯店公司寫字間中關村創業大街"
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    }

    /**
     * 將經緯度轉換成中文地址
     *
     * @param location
     * @return
     */
    private String getLocationAddress(Location location) {
        String add = "";
        Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.CHINESE);
        try {
            List<Address> addresses = geoCoder.getFromLocation(
                    location.getLatitude(), location.getLongitude(),
                    1);
            Address address = addresses.get(0);
            Log.i(TAG, "getLocationAddress: " + address.toString());
            // Address[addressLines=[0:"中國",1:"北京市海淀區",2:"華奧飯店公司寫字間中關村創業大街"]latitude=39.980973,hasLongitude=true,longitude=116.301712]
            int maxLine = address.getMaxAddressLineIndex();
            if (maxLine >= 2) {
                add = address.getAddressLine(1) + address.getAddressLine(2);
            } else {
                add = address.getAddressLine(1);
            }
        } catch (IOException e) {
            add = "";
            e.printStackTrace();
        }
        return add;
    }
}

記得清單文件 加上權限

    <!-- GPS定位權限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- 允許應用程序聯網 -->
    <uses-permission android:name="android.permission.INTERNET" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章