问题描述
LocationListener
的OnLocationChanged
不被回调(触发)
问题分析
locationManager.requestLocationUpdates(provider, 3000, 0, locationListener);
中的provider
一般都是使用
provider = locationManager.getBestProvider(criteria, true);
获取的,但是这个provider
并不是在所有情况下都可用:
- 如果使用的是
GPS_PROVIDER
,并且设备在Low Power
或者Power Save
模式的时候,将无法收取到onLocationChanged
。 - 另外,GPS在室内环境很难获取到位置信息,也会造成没有回调的情况。
解决方式
优先使用NETWORK_PROVIDER
,或者同时监听多个provider
的变化,例如同时监听GPS
和NETWORK
:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
参考