2015-12-21 46 views
6

我想每24小時發送一次到我的服務器,我走了多少步。我有一個AlarmManager關閉alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),1000*60*60*24, pendingIntent1)獲取用戶在後臺發送到服務器的每日步數的最佳方法

現在,這是我卡住的地方......我應該如何測量每日步驟?(記住我需要在後臺發送)我可以使用這個服務,可以覆蓋這個功能public void onSensorChanged(SensorEvent event)這似乎不太準確,因爲我的服務可能會被破壞(並且電池會很快耗盡)。

或者

我可以嘗試使用谷歌健身,但我需要每次我試圖獲取數據的時間要求從用戶連接mGoogleApiClient.connect()(我需要在後臺這個數據)

任何人有這方面的經驗嗎?

+0

不確定您是否在詢問有關測量步驟或將其發送到服務器。 – Nanoc

+0

好點改變標題:) – user1163234

+0

你只是想發送到服務器或想顯示計數給用戶以及? – cgr

回答

3

onSensorChanged()確實工作正常。傳感器應該足夠好,它不應該將振動作爲一個步驟。但是,使用onSencorChanged()捕獲步數時唯一的問題是,如果我們搖動設備,它將它算作一步。爲了避免這種情況,大多數解決方案將實現跟蹤位置併發送到後端,以便後端可以計算設備是否實際移動。它將實際的步數返回到可以顯示的設備。

對於您的情況,如果您認爲服務受到破壞是您的擔憂,那麼您可以以有保證的方式重新啓動它。看到我的回答Unable to restart the service。這解釋了當應用程序在最近的任務中死亡或系統處於內存不足狀態時如何使用UncaughtExceptionHandler重新啓動服務。您的服務不能在深度睡眠模式下運行。你可以使用WakefulBroadcastReceiver and startWakefulService()來運行它。

您應該儘可能減少發送數據到後端的頻率以避免電池電量耗盡。

我不確定GoogleFit API。對此進行研究,您可以爲您的問題添加答案。 ;-)

更新:在機器人上的傳感器
尼斯文章 - How Android devices cope with continuous sensing in standby mode (screen off)Suspend Mode

尼斯一點要注意:

「暫停」是一個低功耗模式,其中的SoC(片上系統)是不是 供電。設備在此模式下的功耗通常爲 比「On」模式下少100倍

+0

這是偉大的thx!但是,我無法使用服務器進行定位,所有計算都需要在客戶端完成。 – user1163234

+0

@ user1163234,這很有幫助。由於您需要提供正確的步驟計數(否則它會非常糟糕地使用戶),請跟蹤位置並在設備內對其進行計數。 – cgr

+0

@ user1163234您可以接受和/或投票回答.. ;-) – cgr

相關問題