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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28963915/article/details/73565100
我们知道 在移动开发中涉及到定位的问题 我们通常采用高德,百度等第三方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之后才可以 这太怪异了 不知道啥原因 希望哪位知道的可以告诉我。

猜你喜欢

转载自blog.csdn.net/qq_28963915/article/details/73565100
今日推荐