我正在尋找實施Android 4.4(http://youtu.be/yv9jskPvLUc)中引入的step sensor API。但是,我無法找到一個明確的解釋,推薦的方法來監控這個背景是什麼?看起來大多數示例只顯示瞭如何在應用程序運行時通過一個活動執行此操作。我並不特別需要高頻率的更新 - 我基本上想要記錄用戶每小時步行到後端服務的步驟數量。 我應該啓動一個後臺服務來調用SensorManager上的registerListener,還是有更優雅的方式?在後臺服務中使用TYPE_STEP_COUNTER?
5
A
回答
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);
}
}
2
這不是一個共完整的解決方案,但最節能的方式可能是每隔一小時左右喚醒一次設備,啓動快速讀取數據的服務,然後重新進入睡眠狀態。
根據您定位的設備級別,使用WakefulBroadcastReceiver(如this answer中所述)似乎是要走的路。
您需要
- 通過WakefulBroadcastReceiver
- 修改模板添加服務和廣播接收器進入清單創建代碼。
- schedule a repeating alarm地方在你的應用
如果任何一個百分點,比一個清晰少,這麼說。請參閱http://code.tutsplus.com/tutorials/android-barometer-logger-acquiring-sensor-data--mobile-10558
3
@ TheoKanning的答案是手動完成此操作的正確方法。或者,Google健身會持續記錄這些數據,並擁有可用於將其吸引到您的應用中的API。
相關問題
- 1. 在後臺服務
- 2. javafx後臺任務:在另一個服務中調用服務
- 3. Titanium中的後臺服務
- 4. FusedLocationAPI在後臺服務
- 5. 位置服務在後臺
- 6. onProviderDisabled在後臺服務
- 7. 位置服務在後臺
- 8. 在後臺運行服務
- 9. Android服務在後臺
- 10. 服務在後臺運行?
- 11. 在node.js中調用https web服務(代理服務器後臺)
- 12. 使用React Native的Android後臺服務
- 13. 從後臺服務使用Android Drive API
- 14. android - 從後臺服務使用相機
- 15. WP7後臺服務
- 16. Android後臺服務
- 17. 後臺服務表
- 18. Ruby後臺服務
- 19. Android後臺服務
- 20. Android後臺服務
- 21. Android後臺服務
- 22. 在Android後臺服務中使用LocationServices.FusedLocationApi.requestLocationUpdates ... onLocationChanged從未調用過
- 23. 如何在後臺調用Web服務?
- 24. 在Android中創建後臺服務
- 25. 在android中創建後臺服務
- 26. 在Android中寫入後臺服務
- 27. 在iOS中運行後臺服務
- 28. 在ios中寫入後臺服務
- 29. 在後臺服務中錄製音頻
- 30. 如何在Android中使用Firebase EventListener作爲後臺服務?
我很少用得到的數據完全沒問題。你會在哪裏放置這個代碼?在警報接收器週期性觸發?(對不起,如果我是愚蠢的,不是新的開發,但新的Android) –
是的,這是正確的方法,我編輯我的答案,以顯示細節 – TheoKanning
@TheoKanning你可以詳細說明步進傳感器將如何計數如果沒有調用registerListener(),那麼在一個小時內採取的步驟?不要設置觸發器只能應用於單次傳感器? – ibe