面試問題2之計步器

1 你這個是用什麼語言寫的

在Android studio上,配置了SDK,前端是用的xml開發的,後端是用的Java開發的,最後打包成一個apk安裝到手機上運行

(追問)xml是什麼

是一種標記語言,跟html有些類似,是一種開發前端的界面技術,

2 這是你自己做的嗎

是的,當時因爲自己很感興趣,就動手做了一個這樣的app,作爲期末的設計交給老師,也因爲這個設計,安卓老師給了我一個比較高的期末分數

(追問)有遇到過什麼困難嗎

這個項目功能不是很複雜,所以在開發的過程中都可以通過查資料看視頻的方式解決。困難的話可能剛開始做,會有一些無從下手的感覺,不過因爲有一些github上的例子作參考,所以總體過程還是比較順暢的。

(追問) 說一下你的學習過程

本科有學過安卓開發的課程,那時候對這門課程很感興趣,所以課下又單獨找了安卓官方的系列教學的視頻,後期做這個app的時候根據就是邊查邊做,也會參考github上的項目的代碼思路,不斷完善功能

3 都有什麼功能(怎麼進行交互的)

主界面顯示的是 當前時間、步數、總里程、消耗的卡路里
交互操作主要有 開始計步、暫停、保存計步記錄、查看記錄、設置步長和體重這些操作

(追問) 是怎麼實現計步功能的

就是利用了手機的加速度傳感器,這個傳感器可以感知人體加速度的變化,因爲人的每走一步加速度就會有一個峯值,就仿寫了一個峯值檢測的算法,檢測到一個峯值,傳感器就判定爲一步。在界面上的步數就有出現加一的顯示

是使用的安卓自帶的內置計步傳感器,使用了峯值檢測法這個計步算法,通過這個算法可以使用傳感器來感知人體加速度的變化,用戶每走一步就觸發一次事件,會傳遞一個從開啓服務開始到目前爲止的計步總數,並將計步數傳到Activity與用戶交互

計步操作的實現主要在於手機中的內置的加速度傳感器對步數的統計工作,因爲人在行走過程中加速度變化會呈現出一個cos函數的波形,每走一步會出現一個加速度的峯值,傳感器正是利用這一特點採用了峯值檢測法來檢測步數。當出現峯值時,並且前後兩個峯值產生的時間之差是合理的,則將該步計入總步數。

具體的檢測步驟爲:
對峯值的檢測需要找到滿足如下條件的點:
上一次加速度向上,此次加速度向下,並且在該段時間內可以追溯到一段時間內的加速度數值一直增加

(追問)怎麼計算總里程和卡路里的

默認:體重60kg
步長:1米
總路程=步長✖總步數
卡路里=體重✖總路程

(追問)歷史記錄裏記錄的是什麼,是怎麼存儲起來的

歷史記錄裏有 保存的時間、步數、總里程、卡路里
是使用了文件存儲的方式,以字符流的的形式放到文件中,需要的時候讀取,不需要的時候直接從文件中刪除。

4 具體是如何實現這個步數的計算的 (什麼情況下會進行計步)

點擊開始計步,如果期間不暫停的話,就一直計步知道直到保存操作結束

(追問)關機之後還會統計步數嗎,那熄屏或者app退出之後呢

關機之後就不會,或者退出app之後就不會統計步數了,
熄屏之後,如果這時候app仍在後臺運行,也會是會一直統計步數的

(追問)怎麼做到熄屏之後還統計步數的

用到SDK裏的一個服務類, 開啓一個Service就可以實現計步器的後臺的運行,在其中實現傳感器的監聽,並將計步數傳到Activity與用戶交互,並在Service中每隔30s保存一次數據以保證數據的精確。
Service(服務)是Android中實現後臺運行的解決方案,適合執行不需要與用戶交互而且還要求長期運行的任務。

5 怎麼實現數據的存儲的

一些設置信息是用sharedpreference存儲的
歷史記錄是用的文件以字符流的的方式存儲

內置計步傳感器
Android計步模塊(類似微信運動)
Android中怎樣使用計步器傳感器 “TYPE_STEP_DETECTOR”
手機上的計步功能是怎麼實現的

Sensor_ TYPE_STEP_DETECTOR

步行檢測傳感器,用戶每走一步就觸發一次事件

傳感器類型值(Sensor Type):18 (0x00000012)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章