2016-05-10 147 views
0

我正在製作一個定期採樣數據的應用程序。出於某種原因,我無法獲取GPS數據。 這裏是我的了:Android - 註冊後GPS位置不更新

清單:

<uses-permission android:name="android.permission.ACCESS_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

代碼:

public class GPSWrapper implements ListenerWrapper { 
    public static final int SAMPLES = 10; 
    public static final int GPS_SENS_TYPE = -1; 
    public static final String GPS_SENS_NAME = "gps"; 
    private LocationManager mLocManager; 

    public GPSWrapper(LocationManager locationManager){ 
     mLocManager = locationManager; 
    } 

    @Override 
    public void sampleSensor() { 
     if (mLocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new GPSDataCollector()); 
     } 
     if (mLocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
      mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new GPSDataCollector()); 
     } 
    } 

    public void unregister(GPSDataCollector collector) { 
     mLocManager.removeUpdates(collector); 
    } 

    private class GPSDataCollector implements LocationListener{ 
     public ArrayList<String> m_sensorData; 

     public GPSDataCollector(){ 
      m_sensorData = new ArrayList<>(); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      double latitude = location.getLatitude(); 
      double longitude = location.getLongitude(); 
      double altitude = location.getAltitude(); 
      m_sensorData.add(latitude + ":" + longitude + ":" + altitude); 
      DataCollector.getInstance().fillData(GPS_SENS_TYPE, m_sensorData); 
      m_sensorData.clear(); 
      if (m_sensorData.size() >= SAMPLES) { 
       unregister(this); 
      } 
     } 

     @Override 
     public void onProviderDisabled(String provider) {} 

     @Override 
     public void onProviderEnabled(String provider) {} 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
    } 
} 

的問題是,我沒有得到任何更新任何責任。 我在3種不同的設備上試過這段代碼,根本沒有結果。 我嘗試使用斷點來確保'onLocationChanged'方法被調用,但它們不是。 我經歷了StackOverflow中的多個問題,並且我沒有找到任何解決方案。

我想重申一下,我沒有null位置的問題,函數不會被調用AT ALL。

我在外面走幾分鐘的時候測試了這段代碼,所以衛星接收不是問題。 GPS跟蹤圖標始終處於運行狀態。

回答

1

當您撥打requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new GPSDataCollector());時,您每0毫秒和每0米請求位置更新。傳遞1000作爲第二個參數來每秒獲取更新。當然,GPS信號必須可用。

+0

感謝您的回答。我知道參數是什麼意思,這是因爲我無法獲得任何讀數而絕望,所以我將它設置爲「只需更新」。 將它設置爲每秒採樣真的在這裏有所作爲?我沒有得到任何更新 –

+0

有一個帖子在這裏,在stackoverflow上,關於「只是更新」在某些設備上不起作用。除此之外,你的代碼看起來不錯,可能是一些設備問題。檢查它在其他應用程序中工作。檢查android設置。嘗試添加(如果沒有)'<使用權限android:name =「android.permission.INTERNET」/>'和'<使用權限android:name =「android.permission.ACCESS_NETWORK_STATE」/>' –

+0

謝謝,我將嘗試將其設置爲1秒的時間間隔。關於其他標籤,我已經有了,我只是覺得它們沒有關係。 –