IntentService中的NmeaListener不起作用

时间:2013-05-27 13:18:21

标签: android locationmanager

我在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) {

    }


      }
    }  

1 个答案:

答案 0 :(得分:1)

首先,您永远不会调用getNMEA()方法。

其次,您的代码无法编译,因为@Override方法上的onLocationChanged()注释会失败,因为您没有覆盖任何内容。

第三,IntentService一旦onHandleIntent()返回就会消失。 Android将在此之后的某个时间终止您的进程,让您的听众使用它。永远不要从IntentService注册听众。使用常规Service

第四,addNmeaListener() would appear to be unreliable,在某些设备上工作但在其他设备上工作。我会尝试找到一些已知的工作NMEA代码并试一试,看看你的设备是否应该使用它。