0

我在 Intent 服务中使用了 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) {

    }


      }
    }  
4

1 回答 1

1

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

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

第三,an一回来IntentService就走。onHandleIntent()Android 将在此之后的某个时间终止您的进程,并带上您的听众。永远不要从IntentService. 使用常规的Service.

第四,在某些设备上工作但在其他设备上工作addNmeaListener() 似乎不可靠。我会尝试找到一些已知有效的 NMEA 代码并尝试一下,看看您的设备是否应该使用它。

于 2013-05-27T13:42:58.273 回答