計步算法庫的使用方式

歡迎Follow我的GitHub, 歡迎關(guān)于計步算法庫的算法原理使用方法.

Motion

本文的合集已經(jīng)編著成書猪叙,高級Android開發(fā)強化實戰(zhàn),歡迎各位讀友的建議和指導(dǎo)仁卷。在京東即可購買:https://item.jd.com/12385680.html

Android

1. 集成計步算法的服務(wù)

集成計步算法的AAR包

2. 添加權(quán)限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />

3. 初始化服務(wù)

在應(yīng)用創(chuàng)建時, 調(diào)用初始化方法initAppService(); 結(jié)束時, 調(diào)用釋放方法releaseAppService().

public class PedometerApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        PedometerCounterService.initAppService(getApplicationContext());
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        PedometerCounterService.releaseAppService();
    }
}

用于存儲數(shù)據(jù)庫的初始化.

4. 啟動服務(wù)

在需要計步時, 啟動PedometerCounterService服務(wù).

startService(new Intent(this, PedometerCounterService.class));

5. 設(shè)置參數(shù)

在啟動服務(wù)后, 設(shè)置參數(shù).

是否啟用喚醒鎖, 啟動后, 數(shù)據(jù)精確, 但是費電;
是否顯示庫的Log信息;
是否顯示默認的通知欄;

Intent intent = new Intent(IntentConsts.ALGORITHM_SET_PARAMETERS_FILTER);
intent.putExtra(IntentConsts.SWITCH_WAKE_LOCK_EXTRA, false); // 啟動喚醒鎖
intent.putExtra(IntentConsts.SWITCH_SHOW_LOGS_EXTRA, false); // 設(shè)置Log信息
intent.putExtra(IntentConsts.SWITCH_SHOW_NOTIFICATION_EXTRA, true); // 設(shè)置顯示默認通知欄
sendBroadcast(intent);

設(shè)置初始步數(shù)

Intent stepCountIntent = new Intent(IntentConsts.SET_OFFSET_DATA_FILTER);
stepCountIntent.putExtra(IntentConsts.SCS_OFFSET_DATA_EXTRA, 1000);
sendBroadcast(stepCountIntent);

設(shè)置初始運動時間

Intent motionTimeIntent = new Intent(IntentConsts.SET_MOTION_TIME_FILTER);
motionTimeIntent.putExtra(IntentConsts.SCS_MOTION_TIME_EXTRA, 20000L);
sendBroadcast(motionTimeIntent);

5. 接收數(shù)據(jù)

使用Receiver接收步數(shù)廣播.

<receiver
    android:name=".StepReceiver"
    android:exported="false">
    <intent-filter>
        <!--計步傳感器值修改的廣播-->
        <action android:name="me.chunyu.pedometer.step_counter_sensor_value_filter"/>
        <!--加速度傳感器值修改的廣播-->
        <action android:name="me.chunyu.pedometer.accelerate_sensor_value_filter"/>
        <!--日期修改的廣播-->
        <action android:name="me.chunyu.pedometer.time_change_filter"/>
    </intent-filter>
</receiver>

獲取步數(shù)與運動時間

private void doAfterBroadcast(Intent intent) {
    switch (action) {
        // 計步傳感器的步數(shù)增加廣播
        case IntentConsts.STEP_COUNTER_SENSOR_VALUE_FILTER:
            // 計步傳感器的步數(shù)
            mCYStepCounterSensorValue = intent.getIntExtra(IntentConsts.CY_STEP_SENSOR_VALUE_EXTRA, 0);
            // 計步傳感器的時間
            mSCSMotionTime = intent.getLongExtra(IntentConsts.MOTION_TIME_STEP_SENSOR_EXTRA, 0L);
            break;

        // 加速度傳感器的步數(shù)增加廣播
        case IntentConsts.ACCELERATE_SENSOR_VALUE_FILTER:
            // 加速度傳感器的步數(shù)
            mCYAccelerateSensorValue = intent.getIntExtra(IntentConsts.CY_ACCELERATE_SENSOR_VALUE_EXTRA, 0);
            // 加速度傳感器的時間
            mASMotionTime = intent.getLongExtra(IntentConsts.MOTION_TIME_ACCELERATE_EXTRA, 0L);
            break;
        // ...
    }
}

默認選擇計步傳感器, 當(dāng)沒有計步傳感器時, 使用加速度傳感器記錄. 內(nèi)部控制.

6. 停止與啟動服務(wù)的自啟動

服務(wù)會自動啟動, 防止因系統(tǒng)原因的關(guān)閉. 如需關(guān)閉服務(wù)的自啟動, 需要設(shè)置; 再次開啟, 也需要重新設(shè)置. 默認開啟自啟動服務(wù).

// 關(guān)閉自啟動服務(wù)
public void stopAuto(View view) {
    Context context = getApplicationContext();
    ConfigConsts.setAutoStartService(context, false);
    MainUtils.tryStopService(context); // 關(guān)閉服務(wù)
}

// 開啟自啟動服務(wù)
public void startAuto(View view) {
    Context context = getApplicationContext();
    ConfigConsts.setAutoStartService(context, true);
    MainUtils.tryStartService(context); // 啟動服務(wù)
}

7. 數(shù)據(jù)庫

導(dǎo)入Sugar

compile 'com.github.satyan:sugar:1.5'
-keep class me.chunyu.pedometerservice.database.** { *; }

補充

使用說明補充

(1) 啟動服務(wù), 在application里啟動還是普通activity?
當(dāng)需要計步時, 啟動服務(wù)即可, 位置都可以.

(2) 設(shè)置參數(shù)在application里設(shè)置還是普通activity?
同上, 在服務(wù)啟動后, 設(shè)置參數(shù).

(3) 獲取步數(shù)和時間doAfterBroadcast, 這個方法如果在MainActiity里調(diào)用了, 是不是只要走路, 就一直會收到廣播呢?
確保廣播可以收到, 只要有步數(shù)變化, 就會收到.

(4) 好浪費電, 有什么辦法可以不費電?
電量優(yōu)化措施已經(jīng)封裝在服務(wù)中, 不需要優(yōu)化. 電量消耗已經(jīng)最小.

(5) 你們會不會存到數(shù)據(jù)庫里, 如果想獲取數(shù)據(jù)可不可以調(diào)用方法直接從數(shù)據(jù)庫里獲取每天的運動步數(shù)呢, 以及如果獲取最近5天的歷史步數(shù)呢?
最好做本地存儲, 不依賴服務(wù)的存儲, 統(tǒng)計本地的歷史數(shù)據(jù), 不推薦直接操作服務(wù)的數(shù)據(jù)庫.
不過數(shù)據(jù)庫的接口也已經(jīng)開放, 如下獲取計步傳感器與加速度傳感器的步數(shù), 以此類推, 風(fēng)險較大.

// 獲取5天前計步傳感器存儲步數(shù)
int stepSensor = CYStepSensorRecordDB.getCurrentStep(MainUtils.getBeforeDay(new Date(), 5));

// 獲取5天前加速度傳感器存儲步數(shù)
int accelerateSensor = CYAccelerateRecordDB.getCurrentStep(MainUtils.getBeforeDay(new Date(), 5));

// 判斷是否包含計步傳感器
boolean isStepSensor = MainUtils.hasStepSensor(getApplicationContext()); 

(6) 出現(xiàn)數(shù)據(jù)庫加載錯誤, 怎么辦?

java.lang.RuntimeException: 
Unable to create service me.chunyu.pedometerservice.PedometerCounterService: 
android.database.sqlite.SQLiteException: 
no such table: CY_ACCELERATE_RECORD (code 1): , 
while compiling: SELECT * FROM CY_ACCELERATE_RECORD WHERE _date = ?
...

Android Studio 2.0SugarORM沖突, 通過設(shè)置Instant Run解決.

ORM

重新運行應(yīng)用.


合作

本算法目前僅在公司內(nèi)部使用, 如需合作請直接站內(nèi)私信我.


OK, that's all.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穴翩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锦积,更是在濱河造成了極大的恐慌芒帕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丰介,死亡現(xiàn)場離奇詭異背蟆,居然都是意外死亡,警方通過查閱死者的電腦和手機哮幢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門带膀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橙垢,你說我怎么就攤上這事垛叨。” “怎么了柜某?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵嗽元,是天一觀的道長。 經(jīng)常有香客問我喂击,道長剂癌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任翰绊,我火速辦了婚禮佩谷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘监嗜。我一直安慰自己谐檀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布秤茅。 她就那樣靜靜地躺著稚补,像睡著了一般。 火紅的嫁衣襯著肌膚如雪框喳。 梳的紋絲不亂的頭發(fā)上课幕,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天厦坛,我揣著相機與錄音,去河邊找鬼乍惊。 笑死杜秸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的润绎。 我是一名探鬼主播撬碟,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莉撇!你這毒婦竟也來了呢蛤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤棍郎,失蹤者是張志新(化名)和其女友劉穎其障,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涂佃,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡励翼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辜荠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汽抚。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伯病,靈堂內(nèi)的尸體忽然破棺而出造烁,到底是詐尸還是另有隱情,我是刑警寧澤狱从,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布膨蛮,位于F島的核電站叠纹,受9級特大地震影響季研,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誉察,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一与涡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧持偏,春花似錦驼卖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卿叽,卻和暖如春桥胞,著一層夾襖步出監(jiān)牢的瞬間恳守,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工贩虾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留催烘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓缎罢,卻偏偏與公主長得像伊群,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子策精,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容