我在Intent Service中使用了NmeaListener。
问题 - onNmeaReceived永远不会被调用。
//This is a reference code
public class NMEAService extends IntentService {
private static NMEAListener listener;
// This function would be called from onHandleIntent
protected void getNMEA() {
listener = new NMEAListener();
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0,
listener,Looper.myLooper());
lm.addNmeaListener(listener);
}
private class NMEAListener implements NmeaListener{
@Override
public void onNmeaReceived(long timestamp, String nmea) {
// NMEA Received
// This is never getting called
}
@Override
public void onLocationChanged(Location location) {
// This is getting called
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
答案 0 :(得分:1)
首先,您永远不会调用getNMEA()
方法。
其次,您的代码无法编译,因为@Override
方法上的onLocationChanged()
注释会失败,因为您没有覆盖任何内容。
第三,IntentService
一旦onHandleIntent()
返回就会消失。 Android将在此之后的某个时间终止您的进程,让您的听众使用它。永远不要从IntentService
注册听众。使用常规Service
。
第四,addNmeaListener()
would appear to be unreliable,在某些设备上工作但在其他设备上工作。我会尝试找到一些已知的工作NMEA代码并试一试,看看你的设备是否应该使用它。