2016-04-03 76 views
12

我正在開發一個應用程序Android Wear。它從加速度傳感器偵聽座標並找到一個模式。加速度計傳感器導致服務損失

爲此,當用戶單擊按鈕時,服務啓動並開始將座標存儲在列表中。通常,加速計傳感器每秒記錄4到5個座標。

問題是,有時onSensorChanged()方法在數秒內不會接收數據,導致數據丟失並且無法找到模式。

這是我服務的要點:https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07

事情我已經嘗試:

  • 我使用機器人:stopWithTask =假防止服務停止活動時死亡。
  • 我還使用了一個WakeLock來防止設備在服務記錄座標時進入睡眠狀態。

我在做什麼錯?是否有另一種方法可以接收來自加速度傳感器的回調而不會導致數據丟失?

在此先感謝。

+0

您是否嘗試過使用不同的'SensorManager.SENSOR_DELAY_ *'常量?對這個問題有什麼影響? – String

回答

0

它有點晚,但finnaly我找到了解決方案。

我在前臺啓動服務,使用方法startForeground(int, Notification),服務永遠不會停止。有了這個修復程序,您將永遠不會丟失任何SensorEvent。

0

您可以做的是將數據寫入設備上的文件並從文件中讀取。

// When sensor value has changed 
@Override 
public void onSensorChanged(SensorEvent event){ 
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 

    //Perform a background task to store the data 
    new SensorEventLoggerTask().execute(event); 

    // And continue to do whatever you want and grab the data 
    // The data will be saved in to a file on the device and read it from themre 
    } 
}