赞
踩
话不多说,直接代码:
注意:此经纬度和第三方地图的经纬度不是一个经纬度
例如此经纬度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;
-
- @Override
- protected 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 : 当前的位置
- @Override
- public 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() {
- @Override
- public 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() {
- @Override
- public 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();
- }
-
- //当定位状态发生改变的时候调用的方式
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- // TODO Auto-generated method stub
-
- }
-
- //当定位可用的时候调用的方法
- @Override
- public void onProviderEnabled(String provider) {
- // TODO Auto-generated method stub
-
- }
-
- //当定位不可用的时候调用的方法
- @Override
- public void onProviderDisabled(String provider) {
- // TODO Auto-generated method stub
-
- }
-
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- locationManager.removeUpdates(myLocationListener);//关闭gps,但是高版本中规定打开和关闭gps必须由用户自己主观的去实现,代码已经不允许进行操作
- }
- }
咱们来看下定位的效果图:
如果需要源码可点击下面下载:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。