Android系统服务:LocationManager

本文详细介绍了Android系统的定位机制,包括如何获取位置权限、使用LocationManager进行定位更新设置及监听,同时还探讨了不同定位类型的适用场景及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统定位

需要权限:

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

获取LocationManager

LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

设置参数和监听

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 100, listener);
 * 第一个参数:定位类型
 * 第二个参数:定位时间间隔
 * 第三个参数:定位距离间隔
 * 第四个参数:监听

当第3个参数不为0时,以第3个参数为依据;当第三个参数为0,已第2个参数为依据。

定位类型:(6.0上测试失败,没有获取到坐标,即使把targetSdkVersion改成22,;5..1上测试成功。)

LocationManager.GPS_PROVIDER
LocationManager.NETWORK_PROVIDER
LocationManager.PASSIVE_PROVIDER
LocationListener listener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        //获取到坐标
        LogUtil.d("onLocationChanged" + location.getProvider() + "," + location.getLongitude() + "," + location.getLatitude() + ","
                + location.getTime() + "," + location.getAltitude());
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        //GPS状态变化时触发
        LogUtil.d("onStatusChanged," + provider + "," + status);
    }

    @Override
    public void onProviderEnabled(String provider) {
        //GPS开启时触发
        LogUtil.d("onProviderEnabled," + provider);
    }

    @Override
    public void onProviderDisabled(String provider) {
        //GPS关闭时触发
        LogUtil.d("onProviderDisabled," + provider);
    }
};

AndroidUtilCodeLocationUtils

是否打开了GPS:

LocationUtils.isGpsEnabled()
LocationUtils.register(0, 0, new LocationUtils.OnLocationChangeListener() {
    @Override
    public void getLastKnownLocation(Location location) {
        LogUtil.d("getLastKnownLocation," + location.getLatitude() + "," + location.getLongitude());
    }

    @Override
    public void onLocationChanged(Location location) {
        LogUtil.d("onLocationChanged," + location.getLatitude() + "," + location.getLongitude());
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        LogUtil.d("provider=" + provider + ",status=" + status);
    }
});


LocationUtils.unregister();

其它

demo: http://git.oschina.net/AndroidSystemService/locationmanager01
android 的三种定位方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值