android傳感器

android傳感器的種類
Sensor framework

使用Android的sensor framework,可以訪問設備上可用的傳感器勾哩,獲取傳感器原始數(shù)據(jù)歇僧。比如:

1.查看設備上可用的傳感器。
2.查看某一個傳感器的性能瘾境,比如它的量程铐刘、分辨率陪每、能量要求等。
3.獲取測量數(shù)據(jù)镰吵,并且設置刷新頻率檩禾。
4.注冊和注銷傳感器事件監(jiān)聽器。

Sensor framework是android.hardware這個包的一部分疤祭,包含下面一些重要的類:SensorManager, Sensor, SensorEvent, SensorEventListener

識別傳感器

Android sensor framework提供了一些方法盼产,使得在運行時可以方便地查看設備上都有哪些傳感器。
首先勺馆,需要獲取sensor service的一個引用戏售;即通過向 getSystemService()
方法中傳入SENSOR_SERVICE 參數(shù)來創(chuàng)建一個SensorManager類的實例。

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

然后草穆,可以通過在getSensorList() 方法中傳入TYPE_ALL來獲取設備上的所有傳感器灌灾。

List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);

如果想要獲取指定類型的一系列傳感器,可以使用參數(shù)TYPE_GYROSCOPE悲柱,TYPE_LINEAR_ACCELERATIONTYPE_GRAVITY等锋喜。

對于某種特定類型的傳感器來說,設備上含有不止一個這種傳感器诗祸,那么這些傳感器中的一個將被指定為這種類型的默認傳感器跑芳。使用getDefaultSensor()方法并且傳入特定的傳感器類型轴总,可以得到此類型的默認傳感器直颅。

使用傳感器之前需要檢測相應的傳感器是否存在,因為并不是沒臺設備都包含想要使用的傳感器

Sensor mSensor = mManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
if (mSensor == null){
      //傳感器不存在
}

還可以通過Android Market過濾器來限定目標設備必須帶有指定的傳感器

 <uses-feature
     android:name="android.hardware.sensor.orientation"
     android:required="true">
 </uses-feature>
監(jiān)聽傳感器事件

為了檢測傳感器數(shù)據(jù)怀樟,需要實現(xiàn)SensorEventListener接口中的兩個回調方法:onAccuracyChanged()onSensorChanged()功偿。

private SensorEventListener listener = new SensorEventListener() {
    /**
     * 傳感器事件值改變回調
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
        //判斷傳感器
        if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
            //讀取傳感器測量值  
            float angularX = event.values[0];
        }
    }
    /**
     * 傳感器精度發(fā)生改變時候的回調
     */
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
};
注冊和注銷傳感器監(jiān)聽

通過registerListener方法注冊傳感器監(jiān)聽

  protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(listener, mLight, SensorManager.SENSOR_DELAY_NORMAL);
  }

通過unregisterListener方法注銷傳感器監(jiān)聽

  protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(listener);
  }

注:當不需要傳感器時你應該關閉它,特別是activity暫停的時候往堡。如果不這么做你的電池會很快消耗完械荷,系統(tǒng)不會在屏幕關閉的時候自動關閉傳感器。

registerListener()注冊時使用了默認的數(shù)據(jù)延遲SENSOR_DELAY_NORMAL

數(shù)據(jù)延遲(或叫采樣率)控制著通過onSensorChanged()方法傳遞傳感器事件的間隔虑灰。

默認的數(shù)據(jù)延遲(200,000 microseconds)對于監(jiān)控屏幕方向改變比較合適吨瞎;其他的:
SENSOR_DELAY_GAME(20,000 microsecond delay),
SENSOR_DELAY_UI(60,000 microsecond delay),
SENSOR_DELAY_FASTEST(0 microsecond delay),
另外Android 3.0 (API Level 11)可以使用絕對值來設置數(shù)據(jù)延遲(單位是毫秒)穆咐。

設定的延遲只是一個建議性的延遲颤诀,Android系統(tǒng)或其他應用可以改變這個延遲字旭。
最好的實踐經驗是,指定可用的最大延遲崖叫,因為系統(tǒng)通常是用一個比你指定的值小一些的值遗淳。
這就是說,需要指定滿足應用需求的最低的采樣率心傀。用比較大的延遲可以使處理器負載較輕屈暗,從而消耗更少的能量。

一旦設定后脂男,不必改變采樣率阵子;如果因為某種理由你必須改變采樣率,你必須注銷吓歇,然后重新注冊這個sensor listener表窘。

傳感器坐標系統(tǒng)

通常,sensor framework使用一個標準的三軸坐標系統(tǒng)來表達數(shù)值堕油。

對于大多數(shù)傳感器來說潘飘,坐標系統(tǒng)是相對于設備屏幕來說的。

當一個設備被放在其默認的方向上時掉缺,X軸是水平指向右的卜录,Y軸是垂直向上的,Z軸是指向屏幕正面之外的眶明,即屏幕背面是Z的負值艰毒。


在屏幕方向改變的時候,坐標系中的軸是不會交換的搜囱。

不能假設設備的自然(默認)方向是豎直的(portrait)丑瞧,自然方向對于很多的平板設備來說是橫向的(landscape)。

坐標系永遠是基于設備的自然方向的蜀肘。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末绊汹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扮宠,更是在濱河造成了極大的恐慌西乖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坛增,死亡現(xiàn)場離奇詭異获雕,居然都是意外死亡,警方通過查閱死者的電腦和手機收捣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門届案,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罢艾,你說我怎么就攤上這事楣颠〖蕹耍” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵球碉,是天一觀的道長蜓斧。 經常有香客問我,道長睁冬,這世上最難降的妖魔是什么挎春? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮豆拨,結果婚禮上直奋,老公的妹妹穿的比我還像新娘。我一直安慰自己施禾,他們只是感情好脚线,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弥搞,像睡著了一般邮绿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攀例,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天船逮,我揣著相機與錄音,去河邊找鬼粤铭。 笑死挖胃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的梆惯。 我是一名探鬼主播酱鸭,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垛吗!你這毒婦竟也來了凹髓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤职烧,失蹤者是張志新(化名)和其女友劉穎扁誓,沒想到半個月后防泵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚀之,經...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年捷泞,在試婚紗的時候發(fā)現(xiàn)自己被綠了足删。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡锁右,死狀恐怖失受,靈堂內的尸體忽然破棺而出讶泰,到底是詐尸還是另有隱情,我是刑警寧澤拂到,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布痪署,位于F島的核電站,受9級特大地震影響兄旬,放射性物質發(fā)生泄漏狼犯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一领铐、第九天 我趴在偏房一處隱蔽的房頂上張望悯森。 院中可真熱鬧,春花似錦绪撵、人聲如沸瓢姻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幻碱。三九已至,卻和暖如春细溅,著一層夾襖步出監(jiān)牢的瞬間收班,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工谒兄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摔桦,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓承疲,卻偏偏與公主長得像邻耕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子燕鸽,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容

  • Android傳感器定義 Android 傳感器相關術語微機電傳感器(MEMS)MEMS 通常制作在規(guī)格很小的硅芯...
    Jannonx閱讀 4,381評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,317評論 25 707
  • 傳感器的使用最有名的大概就是微信的搖一搖兄世,和各種記步工具吧,所以只要運用的好啊研,傳感器也是一好的方向御滩。可以激發(fā)開發(fā)者...
    Dddddw閱讀 656評論 0 2
  • 這期活動是圍繞“書”開始的党远,高爾基曾說過:“書是人類進步的階梯”削解。 書是世界上不可缺少的一樣東西, ...
    小飛家閱讀 239評論 0 1
  • 童年記憶里矫废,爸爸媽媽經常有沖突盏缤。原因五花八門,甚至好像沒有什么緣由蓖扑。 回想起來唉铜,爸爸媽媽每次爆發(fā)戰(zhàn)爭,最受傷的人律杠,...
    撒花女子閱讀 276評論 0 0