利用Android的api获取经纬度的方法

来源:互联网 发布:netty java实例 编辑:程序博客网 时间:2024/06/05 11:30
我们知道 在移动开发中涉及到定位的问题 我们通常采用高德,百度等第三方api来实现 ,虽然各家api的坐标体系是不一样的但是他们都提供了相互转换的方法,其实 在Android的官方api中也有定位的api,都在android.location包下。借助这个包下的几个类 我们同样可以实现定位的功能。我这里简单的写了一个demo
import android.content.Context;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private TextView info;    private LocationManager locationManager;    private String provider;    private Location location;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        info = (TextView) findViewById(R.id.tv);        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    }    @Override    protected void onResume() {        super.onResume();        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {            Criteria criteria = new Criteria();            criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度            criteria.setAltitudeRequired(false);//不要求海拔            criteria.setBearingRequired(false);//不要求方位            criteria.setCostAllowed(true);//允许有花费            criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗            locationManager.setTestProviderEnabled("gps", true);            //从可用的位置提供器中,匹配以上标准的最佳提供器            provider = locationManager.getBestProvider(criteria, true);            //监听位置变化,2秒一次,距离10米以上            locationManager.requestLocationUpdates(provider, 2000*30, 100,locationListener);            //获得最后一次变化的位置            Location location = locationManager.getLastKnownLocation(provider);            if(null!=location){                info.setText("22经度:"+location.getLongitude()+"--"+"纬度:"+location.getLatitude());            }else{                info.setText("没有获取到经纬度11");            }        }else{            Location  location= locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);            //监听位置变化,2秒一次,距离10米以上            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000*30, 100,locationListener);            if(null!=location){                info.setText("11经度:"+location.getLongitude()+"--"+"纬度:"+location.getLatitude());            }else{                //toggleGPS();                info.setText("没有获取到经纬度22");            }        }    }    //位置监听器    LocationListener locationListener = new LocationListener() {        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {        }        @Override        public void onProviderEnabled(String provider) {        }        @Override        public void onProviderDisabled(String provider) {        }        //当位置变化时触发        @Override        public void onLocationChanged(Location location) {            //使用新的location更新TextView显示        }    };    @Override    protected void onDestroy() {        super.onDestroy();        locationManager.removeUpdates(locationListener);        locationManager.setTestProviderEnabled(provider, false);    }}//权限 <uses-permission android:name="android.permission.INTERNET" /> <!-- GPS定位权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

我在自己测试的时候发现一个问题 当我切换了设置中的定位精度后 这个东西就获取不到经纬度了 只有重启app之后才可以 这太怪异了 不知道啥原因 希望哪位知道的可以告诉我。

阅读全文
0 1
原创粉丝点击