我看到使用API级别23(Android 6.0)的真实设备与为相同API级别配置的仿真器之间的位置服务行为非常不同。
我有一个包含以下声明的类:
public class GPS implements LocationListener, GpsStatus.NmeaListener {
在构造函数中有以下内容:
LocationManager locationManager = (LocationManager) GPS.appcontext.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener)this);
locationManager.addNmeaListener(this);
在AVD模拟器中,NMEA监听器永远不会触发,但我确实看到通过onLocationChanged
回调提供的位置更新。
在真实设备上,我仅看到NMEA更新,onLocationChanged
永远不会触发。此外,如果我在构造函数中注释掉requestLocationUpdates
调用,那么我在实际设备上得不到任何东西(甚至不是NMEA)。
使用AVD时,我通过模拟器发送GPS坐标。
这仅仅限制了GPS在仿真器中的实现方式吗?换句话说,有没有办法通过模拟器获得NMEA句子?
附带问题:为什么我必须请求位置更新并添加NMEA监听器才能在真实设备上获得回调?
提前致谢。