徒手造咕咚之基礎(chǔ)篇(2):安卓傳感器

前言:本來這個(gè)月是想順著上周的地圖SDK接著總結(jié)定位SDK的,但是由于本月事情比較多问潭,而梳理這個(gè)咕咚核心功能用到的定位SDK又比較耗時(shí)眷柔,所以暫放一下翁巍,來總結(jié)梳理一下安卓的傳感器。潑辣的你可能又要開罵了...“明明說好造咕咚慌植!點(diǎn)擊進(jìn)來你扯傳感器甚牲,忽悠大眾?”


其實(shí)蝶柿,用過地圖類的軟件或者咕咚的人都應(yīng)該記得丈钙,當(dāng)你處于室內(nèi),或者深山老林交汤,灌木叢生之地雏赦,地圖上標(biāo)注你當(dāng)前位置的點(diǎn)往往一直閃爍,而且閃爍的范圍還比較大。這種時(shí)候星岗,拿著導(dǎo)航地圖卻搞不清自己到底在哪兒的你會(huì)很自然的喊出一句WTF填大!歸結(jié)其原因,不過就是當(dāng)前地圖的GPS信號(hào)太弱俏橘,或者不穩(wěn)定允华。
正如第一篇中所提到,所有的數(shù)據(jù)幾乎都是通過GPS定位寥掐,轉(zhuǎn)化成坐標(biāo)靴寂,然后通過坐標(biāo)去計(jì)算速度,距離曹仗,配速等等榨汤,那么蠕搜,當(dāng)出現(xiàn)前面說的GPS信號(hào)不穩(wěn)定怎茫,或者壓根就沒信號(hào)的時(shí)候怎么辦呢?用戶辛苦跑半天妓灌,結(jié)果你啥數(shù)據(jù)沒記轨蛤,或者是一堆壓根就不是人類能達(dá)到的數(shù)據(jù)(GPS漂移的速度瞬間能上法拉利哦),這兩種體驗(yàn)想想就會(huì)讓很多有脾氣的人又喊到WTF虫埂,然后早卸
時(shí)間限制祥山,,這里直接給出解決方案
1.對(duì)于GPS弱掉伏,或者不穩(wěn)定缝呕,出現(xiàn)小幅飄逸的情況,咕咚等大多數(shù)app都會(huì)采取算法過略斧散,算法排點(diǎn)等處理方法供常,這種情況等到寫完定位SDK后會(huì)詳細(xì)討論~標(biāo)題都已經(jīng)想好了,嗯鸡捐! “徒手造咕咚之優(yōu)化篇(x):GPS取點(diǎn)過濾栈暇,優(yōu)化”。
2.對(duì)于GPS信號(hào)全無(wú)箍镜,或者進(jìn)出地鐵站等場(chǎng)所導(dǎo)致大幅漂移的情況源祈,咕咚等大多數(shù)app采用的是傳感器計(jì)步:通過傳感器估量用戶的行走步數(shù),然后通過估算算出此段距離~當(dāng)然色迂,這種傳感器記步是木有軌跡的香缺!

廢話了半天,終于洗白了歇僧,為什么要扯安卓傳感器赫悄!目的就是處理上面說的第二種情況,當(dāng)極端環(huán)境出現(xiàn)時(shí),讓用戶盡量不早卸~

一埂淮、安卓4.4+自帶計(jì)步傳感器

在大于4.4的設(shè)備安卓設(shè)備上(大多數(shù))姑隅,一般都自帶有兩種計(jì)步傳感器服務(wù),通過獲取到對(duì)應(yīng)的傳感器倔撞,設(shè)置對(duì)應(yīng)的監(jiān)聽讲仰,可以在步數(shù)改變時(shí)候觸發(fā)回調(diào)。 這兩種計(jì)步傳感器可以很方便的幫我們實(shí)現(xiàn)計(jì)步的功能痪蝇。

引用代碼示例

初始化傳感器:

   SensorManager sensorManager=(SensorManager) context.getSystemService(mComtext.SENSOR_SERVICE);//獲取系統(tǒng)傳感器服務(wù)
    if (VERSION_CODES >= 19) { //4.4設(shè)備之上
        addCountStepListener();  //使用系統(tǒng)的計(jì)步傳感器
    } else {
        addBasePedoListener();  //使用基礎(chǔ)的傳感器   實(shí)質(zhì)是加速傳感器
    }
 private void addCountStepListener() {
    Sensor detectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);//第一種累加計(jì)步鄙陡,特點(diǎn):每次觸發(fā),count+1
    Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);//第二種是持續(xù)計(jì)步躏啰,特點(diǎn):在一段時(shí)間里只觸發(fā)一次趁矾,會(huì)累計(jì)步數(shù),在運(yùn)動(dòng)停止后觸發(fā)给僵,并且返回累計(jì)值毫捣。
    if (detectorSensor != null) {
        sensorType = "TYPE_STEP_DETECTOR";
        sensorManager.registerListener(sensorEventListener, detectorSensor, SensorManager.SENSOR_DELAY_UI);
    } else if (countSensor != null) {
        sensorType = "TYPE_STEP_COUNTER";
        sensorManager.registerListener(sensorEventListener, countSensor, SensorManager.SENSOR_DELAY_UI);
    } else {
        addBasePedoListener();
    }
}

@Override
public void onSensorChanged(SensorEvent event) {
     if (sensorType.equals("TYPE_STEP_DETECTOR")) {
        if (event.values[0] == 1.0f ) {
            setpCount++;
        }
    } else if (sensorType.equals("TYPE_STEP_COUNTER")) {
       setpCount= (int) event.values[0];
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

整段代碼邏輯如下:
1.獲取傳感器Manager
2.當(dāng)設(shè)備系統(tǒng)>=4.4 通過傳感器Manager獲取類型為TYPE_STEP_DETECTOR和TYPE_STEP_COUNTER的兩種計(jì)步傳感器,并且優(yōu)先使用TYPE_STEP_DETECTOR帝际,
最后activiy實(shí)現(xiàn)SensorEventListener接口獲取回調(diào)onSensorChanged(主要)和onAccuracyChanged(沒用到)
3.當(dāng)設(shè)備低于4.4或者兩種系統(tǒng)傳感器都獲取失敗時(shí)使用基礎(chǔ)傳感器-加速傳感器

二蔓同、系統(tǒng)加速傳感器

引用代碼示例

加速傳感器,當(dāng)無(wú)法使用系統(tǒng)自帶的計(jì)步傳感器時(shí)使用系統(tǒng)的加速傳感器去實(shí)現(xiàn)模擬計(jì)步

StepDcretor為github上基于加速傳感器模擬計(jì)步的實(shí)現(xiàn)~這里有需要的自己百度蹲诀,代碼太長(zhǎng)這里不貼
    private void addBasePedoListener() {
    // 獲得傳感器的類型斑粱,這里獲得的類型是加速度傳感器
    // 此方法用來注冊(cè),只有注冊(cè)過才會(huì)生效脯爪,參數(shù):SensorEventListener的實(shí)例则北,Sensor的實(shí)例,更新速率
    StepDcretor  stepDetector = new StepDcretor(mComtext);
    sensorType = "TYPE_STEP_COUNTER";
    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(stepDetector, sensor, SensorManager.SENSOR_DELAY_UI);
    stepDetector.setOnSensorChangeListener(mysensorEventListener);

三痕慢、傳感器知識(shí)補(bǔ)充

其實(shí)傳感器的種類還有很多尚揣,在app中的應(yīng)用也不少,其他傳感器沒用過~也不是這里的重點(diǎn)守屉,所以簡(jiǎn)單梳理一下

define SENSOR_TYPE_ACCELEROMETER 1 //加速度

define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力

define SENSOR_TYPE_ORIENTATION 3 //方向

define SENSOR_TYPE_GYROSCOPE 4 //陀螺儀

define SENSOR_TYPE_LIGHT 5 //光線感應(yīng)

define SENSOR_TYPE_PRESSURE 6 //壓力

define SENSOR_TYPE_TEMPERATURE 7 //溫度

define SENSOR_TYPE_PROXIMITY 8 //接近

define SENSOR_TYPE_GRAVITY 9 //重力

define SENSOR_TYPE_LINEAR_ACCELERATION 10//線性加速度

define SENSOR_TYPE_ROTATION_VECTOR 11//旋轉(zhuǎn)矢量

可能涉及到的功能大概有 搖一搖惑艇,指南針,游戲開發(fā)用到的光感拇泛,重力滨巴,溫度等(游戲:是男人就上100層),日后如果有涉及到再補(bǔ)充吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俺叭,一起剝皮案震驚了整個(gè)濱河市恭取,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熄守,老刑警劉巖蜈垮,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耗跛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡攒发,警方通過查閱死者的電腦和手機(jī)调塌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠猿,“玉大人羔砾,你說我怎么就攤上這事∨佳” “怎么了姜凄?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)趾访。 經(jīng)常有香客問我态秧,道長(zhǎng),這世上最難降的妖魔是什么扼鞋? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任凤类,我火速辦了婚禮如绸,結(jié)果婚禮上枉疼,老公的妹妹穿的比我還像新娘膘盖。我一直安慰自己转锈,他們只是感情好盘寡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撮慨,像睡著了一般竿痰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砌溺,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天影涉,我揣著相機(jī)與錄音,去河邊找鬼规伐。 笑死蟹倾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猖闪。 我是一名探鬼主播鲜棠,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼培慌!你這毒婦竟也來了豁陆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吵护,失蹤者是張志新(化名)和其女友劉穎盒音,沒想到半個(gè)月后表鳍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祥诽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年譬圣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雄坪。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胁镐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诸衔,到底是詐尸還是另有隱情盯漂,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布笨农,位于F島的核電站就缆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谒亦。R本人自食惡果不足惜竭宰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望份招。 院中可真熱鬧切揭,春花似錦、人聲如沸锁摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谐腰。三九已至孕豹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間十气,已是汗流浹背励背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砸西,地道東北人叶眉。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芹枷,于是被迫代替她去往敵國(guó)和親衅疙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • Android傳感器定義 Android 傳感器相關(guān)術(shù)語(yǔ)微機(jī)電傳感器(MEMS)MEMS 通常制作在規(guī)格很小的硅芯...
    Jannonx閱讀 4,362評(píng)論 0 1
  • 傳感器 傳感器Sensor是一種檢測(cè)裝置杖狼,能感受到被測(cè)量的信息炼蛤,并能將感受到的信息,按一定規(guī)律變換成為電信號(hào)或其他...
    Reathin閱讀 6,333評(píng)論 0 5
  • 猜猜運(yùn)用以下哪個(gè)傳感器:點(diǎn)這里下載(下載了,記得點(diǎn)星星,謝謝!) 傳感器的...
    在逃科學(xué)家閱讀 2,276評(píng)論 0 1
  • 最近在項(xiàng)目中研究計(jì)步模塊蝶涩,主要功能記錄當(dāng)天步數(shù)理朋,類似微信運(yùn)動(dòng)絮识,支付寶計(jì)步,咕咚今日步數(shù)嗽上。開發(fā)之前的調(diào)研工作次舌,搜遍b...
    碼農(nóng)一顆顆閱讀 32,230評(píng)論 37 111
  • 1方向傳感器在方向傳感器中values變量的3個(gè)值都表示度數(shù),它們的含義如下:values[0]:該值表示方位兽愤,也...
    Android_zhang閱讀 457評(píng)論 0 2