Android获取定位经纬度

1、获得LocationManager引用

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

2、获取最后一次成功定位的位置信息,取值包括:

  • GPS_PROVIDER:GPS获得
  • NETWORK_PROVIDER:网络获得
  • PASSIVE_PROVIDER:其他应用程序提供
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

3、获取所有定位提供者

List<String> providers = locationManager.getAllProviders();

4、获取指定定位提供者

LocationProvider provider = locationManager.getProvider(Provider name);

5、判断指定定位提供者是否可用

locationManager.isProviderEnabled(provider);

6、获取可用的定位提供者

List<String> providers = locationManager.getProviders(true);

7、获取可用的定位提供者,并且用criteria对象指定条件

Criteria criteria = new Criteria(); // 创建一个定位准则对象
criteria.setAccuracy(Criteria.ACCURACY_COARSE); // 设置定位精确度
criteria.setAltitudeRequired(true); // 设置是否需要海拔信息
criteria.setBearingRequired(true); // 设置是否需要方位信息
criteria.setCostAllowed(true); // 设置是否允许运营商收费
criteria.setPowerRequirement(Criteria.POWER_LOW); // 设置对电源的需求
List<String> providers = locationManager.getProviders(criteria, true);

8、获取最佳定位提供者

String bestProvider = locationManager.getBestProvider(criteria, true);

9、在onResume()中注册接收位置跟新事件的接收器

locationManager.requestLocationUpdates(bestProvider, 
300,// 间隔多少毫秒通知
0,// 最小间隔距离变化通知
mLocationListener);

10、在onPause()中删除注册

locationManager.removeUpdates(mLocationListener);

11、位置监听器

// 定义一个位置变更监听器
private LocationListener mLocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();
    }
    
    //当禁用的提供程序被调用时会立即调用
    @Override
    public void onProviderDisabled(String arg0) {}

    //用户启用提供程序时被调用
    @Override
    public void onProviderEnabled(String arg0) {}

    //状态变化时被调用
    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
};

12、在AndroidManifest.xml开启权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

13、请求定位授权

//这里以ACCESS_COARSE_LOCATION为例
if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    //申请WRITE_EXTERNAL_STORAGE权限
    this.requestPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION}, 100);//自定义的code 随便填一个数
} else {
    // 用户已授权定位信息
    
}

14、授权回调

// 授权回调。询问是否同意授权的时候,系统会弹出对话框,我们选择之后,会进行回调。在回调里面进行判断。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 100: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被用户同意。
                // 执形我们想要的操作
            } else {
                Log.i("GPS", "未授权定位权限");
                LToast.showToast("未授权定位权限");
                // 用户授权定位信息
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/watson2017/article/details/130705710
今日推荐