2015-12-26 67 views
5

我正在尋找實施Android 4.4(http://youtu.be/yv9jskPvLUc)中引入的step sensor API。但是,我無法找到一個明確的解釋,推薦的方法來監控這個背景是什麼?看起來大多數示例只顯示瞭如何在應用程序運行時通過一個活動執行此操作。我並不特別需要高頻率的更新 - 我基本上想要記錄用戶每小時步行到後端服務的步驟數量。 我應該啓動一個後臺服務來調用SensorManager上的registerListener,還是有更優雅的方式?在後臺服務中使用TYPE_STEP_COUNTER?

回答

5

據我所知,有SensorManager周圍也沒有路,但如果你需要的數據極少,您可以手動觸發傳感器,並用TriggerEventListener,這比SensorEventListener乾淨了一點得到其值。

AlarmManager通常是啓動小時計時器的最佳選擇,即使您的應用程序未運行,它也能正常工作。 AlarmManager發送Intent到擴展BroadcastReceiver的類,並且該類將啓動您的Service。根據您的實施情況,AlarmManager可以在您的應用中的任何位置設置。

StepCountService

SensorManager sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
Sensor stepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); 
sensorManager.requestTriggerSensor(listener, stepCounter); 

private TriggerEventListener listener = new TriggerEventListener(){ 
    @Override 
    public void onTrigger(TriggerEvent event) { 
     //handle step count here 
    } 
} 

MainActivity

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent(context, AlarmReceiver.class); 
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, 
    PendingIntent.FLAG_CANCEL_CURRENT); 
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,AlarmManager.INTERVAL_HOUR, 
    AlarmManager.INTERVAL_HOUR, alarmIntent); 

AlarmReceiver

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, StepCountService.class); 
    context.startService(service); 
    } 
} 
+0

我很少用得到的數據完全沒問題。你會在哪裏放置這個代碼?在警報接收器週期性觸發?(對不起,如果我是愚蠢的,不是新的開發,但新的Android) –

+0

是的,這是正確的方法,我編輯我的答案,以顯示細節 – TheoKanning

+0

@TheoKanning你可以詳細說明步進傳感器將如何計數如果沒有調用registerListener(),那麼在一個小時內採取的步驟?不要設置觸發器只能應用於單次傳感器? – ibe

2

這不是一個共完整的解決方案,但最節能的方式可能是每隔一小時左右喚醒一次設備,啓動快速讀取數據的服務,然後重新進入睡眠狀態。

根據您定位的設備級別,使用WakefulBroadcastReceiver(如this answer中所述)似乎是要走的路。

您需要

  1. 通過WakefulBroadcastReceiver
  2. 修改模板添加服務和廣播接收器進入清單創建代碼。
  3. schedule a repeating alarm地方在你的應用

如果任何一個百分點,比一個清晰少,這麼說。請參閱http://code.tutsplus.com/tutorials/android-barometer-logger-acquiring-sensor-data--mobile-10558