Android 计步器 - 手机自带系统级的 健康运动App 授权
#1. Android 手機(jī)自帶系統(tǒng)級(jí)的 運(yùn)動(dòng)健康A(chǔ)pp
于是我整理一份列表,如下:
- 三星手機(jī)上的 “三星健康” ;? 三星開發(fā)者平臺(tái):SDK:?Hello Health Data | Samsung Developers
- 華為手機(jī)上的“運(yùn)動(dòng)健康”;華為開發(fā)者平臺(tái):SDK?文檔中心
- 小米手機(jī)上的“小米運(yùn)動(dòng)健康”; 小米開放平臺(tái):接入網(wǎng)址??小米健康云開放平臺(tái)? ??
- 魅族手機(jī)上的: 計(jì)步器; ( 😭 還沒找到...)
- oppo手機(jī)上的: 運(yùn)動(dòng)計(jì)步;? ( 😭 還沒找到...)
- vivo手機(jī)不自帶“記步數(shù)”功能的
???數(shù)據(jù)同步 需要相應(yīng)的手機(jī)官方授權(quán),見上列表,我目前找到了 三星/ 華為/ 小米(因?yàn)橛?jì)步器是華米出品)對(duì)接授權(quán)平臺(tái),鏈接中如何對(duì)接 一有盡有!
如華為示例:(這里就偷懶截圖顯示了)
?? 注意:以上對(duì)接 需要去申請(qǐng)賬號(hào),創(chuàng)建應(yīng)用,獲取密鑰之類的數(shù)據(jù)來授權(quán)!
對(duì)于第三方應(yīng)用同步數(shù)據(jù),比如:?微信 - 微信運(yùn)動(dòng) 開啟后能獲取到對(duì)于手機(jī)上的步數(shù),這里我試了華為手機(jī)和oppo手機(jī),發(fā)現(xiàn)“微信運(yùn)動(dòng)”都能顯示出手機(jī)系統(tǒng)級(jí)的健康運(yùn)動(dòng)類應(yīng)用的步數(shù);但是我在vivo手機(jī)上剛開啟微信運(yùn)動(dòng)后,步數(shù)顯示 0,但是之后你的步數(shù)會(huì)實(shí)時(shí)記錄顯示。
闡明理解:(屬于個(gè)人理解)
1. 微信是通過對(duì)接相應(yīng)的授權(quán)平臺(tái),開啟“微信運(yùn)動(dòng)”后,如果手機(jī)存在系統(tǒng)級(jí)的計(jì)步器,即同步手機(jī)自帶計(jì)步器的步數(shù)顯示。
2. 對(duì)于手機(jī)不存在系統(tǒng)級(jí)的計(jì)步器,如vivo手機(jī),開啟“微信運(yùn)動(dòng)”后,也無法獲取到已經(jīng)運(yùn)動(dòng)的步數(shù),只會(huì)顯示0;但是后面會(huì)顯示步數(shù),是可以通過實(shí)現(xiàn)Android自帶的?步測(cè)器傳感器?來記錄步數(shù)。
(備注:具體記錄步數(shù)的靈明度數(shù)值,步數(shù)統(tǒng)計(jì)算法... 微信的高大上,我也不知道具體的實(shí)現(xiàn),就不去做過多猜想)
3.?另外,我們也值得注意,微信已經(jīng)是手機(jī)常駐型級(jí)別的應(yīng)用,所以它在手機(jī)的后臺(tái)進(jìn)程中會(huì)存在后臺(tái)服務(wù),這也為?記錄步數(shù) 這樣行為提供了監(jiān)聽的環(huán)境。
4. 雖然 Android自帶的計(jì)步傳感器(Sensor.TYPE_STEP_COUNTER)可以在應(yīng)用關(guān)閉的時(shí)候繼續(xù)工作,因?yàn)槭茿ndroid系統(tǒng)自帶的,但是它是重啟以來用戶邁出的步數(shù),所以這個(gè)統(tǒng)計(jì)出來的數(shù)據(jù)并不是每天的步數(shù),只是個(gè)總數(shù),而且每次手機(jī)重啟后,都會(huì)置0!所以需要實(shí)現(xiàn) 持久的監(jiān)聽步數(shù),就需要存在常駐型的服務(wù),得到手機(jī)系統(tǒng)的認(rèn)可,不會(huì)殺掉你的進(jìn)程,這對(duì)于現(xiàn)在對(duì)于Android 權(quán)限越來越重視的情況下,我研究不來這樣的“技術(shù)”!(歡迎討論...)
5. 如果我們的App必須要實(shí)現(xiàn)實(shí)時(shí)準(zhǔn)確隔天計(jì)步的功能,其實(shí)還有一個(gè)方式可以,對(duì)接微信運(yùn)動(dòng)小程序來同步微信運(yùn)動(dòng)的數(shù)據(jù),具體怎么對(duì)接,歡迎去百度,Google。
如果要實(shí)現(xiàn)打開App來準(zhǔn)確計(jì)步的功能:其實(shí)也可以用Android自帶傳感器來實(shí)現(xiàn);
以下簡(jiǎn)單介紹下兩個(gè)傳感器:
#2.?Android自帶傳感器
1. 使用計(jì)步器傳感器
以下代碼展示如何獲取默認(rèn)計(jì)步器傳感器的實(shí)例:
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)計(jì)步器傳感器?提供自已激活傳感器后最后一次重啟以來用戶邁出的步數(shù)。與步測(cè)器傳感器相比,計(jì)步器的延遲時(shí)間更長(zhǎng)(最多 10 秒),但精確度更高。
?? 注意:如要保護(hù)運(yùn)行應(yīng)用的設(shè)備上的電池,您應(yīng)使用?JobScheduler?類,從而以特定的時(shí)間間隔從計(jì)步器傳感器檢索當(dāng)前值。盡管不同類型的應(yīng)用需要不同的傳感器讀取間隔,但是除非您的應(yīng)用需要來自傳感器的實(shí)時(shí)數(shù)據(jù),否則應(yīng)盡可能延長(zhǎng)此間隔。
?? 注意:因?yàn)槭侵貑⒁詠碛脩暨~出的步數(shù),所以這個(gè)數(shù)據(jù)并不是每天的步數(shù),只是個(gè)總數(shù),而且每次手機(jī)重啟后,都會(huì)置0!?
2.?使用步測(cè)器傳感器
以下代碼展示如何獲取默認(rèn)步測(cè)器傳感器的實(shí)例:
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR)每次用戶邁步時(shí),步測(cè)器傳感器都會(huì)觸發(fā)事件。延遲時(shí)間預(yù)計(jì)將低于 2 秒。
????注意:使用?傳感器?您必須聲明?ACTIVITY_RECOGNITION 權(quán)限,以便您的應(yīng)用在運(yùn)行 Android?10 (API 級(jí)別 29) 或更高版本的設(shè)備上使用此傳感器。
需要在manifest中添加:
<!-- 您必須聲明 ACTIVITY_RECOGNITION 權(quán)限,以便您的應(yīng)用在運(yùn)行 Android 10 (API 級(jí)別 29) 或更高版本的設(shè)備上使用此傳感器。--><uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>在需要的地方(Activity)中添加申請(qǐng)權(quán)限:
private const val COARSE_REQUEST = 1001/*** Permissions required to make the app work!*/private val CHECK_PERMISSIONS = arrayOf(Manifest.permission.ACTIVITY_RECOGNITION)// 請(qǐng)求權(quán)限private fun requestPermissions() {ActivityCompat.requestPermissions(this,CHECK_PERMISSIONS,COARSE_REQUEST)}// 處理權(quán)限后回調(diào)方法override fun onRequestPermissionsResult(requestCode: Int,permissions: Array<out String>,grantResults: IntArray) {when (requestCode) {COARSE_LOCATION_REQUEST -> {if (allPermissionsGranted()) {// 同意了授權(quán)}else{// 拒絕了授權(quán)}}}}/*** Check if all permission specified in the manifest have been granted*/private fun allPermissionsGranted(): Boolean {return CHECK_PERMISSIONS.all {ContextCompat.checkSelfPermission(baseContext, it) == PackageManager.PERMISSION_GRANTED}}總結(jié)
以上是生活随笔為你收集整理的Android 计步器 - 手机自带系统级的 健康运动App 授权的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Almost Arithmetic Pr
- 下一篇: Android - Glide4.4.0