Android感應器概述(六)

來源:互聯網
上載者:User

標籤:android   style   color   os   ar   使用   for   strong   sp   

監視感應器事件

要監視原始的感應器資料,你須要實現兩個通過SensorEventListener介面暴露的回調方法:onAccuracyChanged()和onSensorChanged()。Android系統在不論什麼發生下列事情的時候都會調用這兩個方法:

1. 感應器精度的改變:

這樣的情況中,系統會調用onAccuracyChanged()方法,它提供了你要引用的發生精度變化的Sensor對象。精度使用下面四個狀態常量之中的一個來代表的:

SENSOR_STATUS_ACCURACY_LOW

SENSOR_STATUS_ACCURACY_MEDIUM

SENSOR_STATUS_ACCURACY_HIGH

SENSOR_STATUS_UNRELIABLE

2. 感應器報告新的值:

這樣的情況中,系統會調用onSensorChanged()方法,它提供了一個SensorEvent對象。SensorEvent對象包括了有關新的感應器資料的資訊,包括:資料的精度、產生資料的感應器、產生資料時的時間戳記、以及感應器記錄的新的資料。

下列代碼顯示了怎樣使用onSensorChanged()方法來監視來自亮度感應器的資料。這個範例在一個TextView中顯示原始的感應器資料:

publicclassSensorActivityextendsActivityimplementsSensorEventListener{
  privateSensorManager mSensorManager;
  privateSensor mLight;
 
  @Override
  publicfinalvoid onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    mSensorManager =(SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
  }
 
  @Override
  publicfinalvoid onAccuracyChanged(Sensor sensor,int accuracy){
    // Do something here if sensor accuracy changes.
  }
 
  @Override
  publicfinalvoid onSensorChanged(SensorEventevent){
    // The light sensor returns a single value.
    // Many sensors return 3 values, one for each axis.
    float lux =event.values[0];
    // Do something with this sensor value.
  }
 

@Override

 protected void onResume() {

   super.onResume();

   mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);

 }

 

 @Override

 protected void onPause() {

   super.onPause();

   mSensorManager.unregisterListener(this);

 }

}

在這個範例中,在調用registerListener()方法時,指定了預設的資料延遲(SENSOR_DELAY_NORMAL)。資料延遲(或採樣率)控制著感應器事件通過onSensorChanged()回調方法發送給你的應用程式的時間間隔。預設的資料延遲適用於監視典型的螢幕方向的變化,它所使用的時間延遲是200,000毫秒。你可以指定其它的資料延遲類型,如SENSOR_DELAY_GAME(20,000毫秒延遲)、SENSOR_DELAY_UI(60,000毫秒延遲)、或者是SENSOR_DELAY_FASTEST(0毫秒延遲)。Android3.0(API Level 11)以後,你也可以使用一個絕對值(以毫秒的形式)來指定延遲。

你所指定的延遲僅僅是建議性的延遲。Android系統和其它應用程式都可以改動這個延遲。作為最好的實踐,你應該指定你所須要的最大延遲,由於系統一般會使用比你指定的要小的延遲(也就是說,你應該選擇你的應用所須要的最低的採樣率)。使用較大的延遲會減少處理器的負載,同一時候也因此減少了電量的損耗。

有沒有公開的方法用於推斷感應器架構把感應器事件發送給你的應用程式的頻率;可是,你可以使用前後兩個感應器事件的時間戳記來計算採樣率。一旦你設定了採樣率(延遲)就不要改變。假設由於某些原因須要改變,那麼就必須先登出然後在又一次注冊感應器監聽器。

在這個範例中還要重點關注的是:使用onResume()和onPause()回調方法來注冊和登出感應器監聽事件。作為最好的實踐,你始終應該在不須要的時候禁用感應器,尤其是在Activity被掛起的時候。假設不這樣做,由於有些感應器有非常大的電量需求,因此會非常快的消耗掉電池電量。在螢幕關閉的時候,系統不會自己主動的禁用感應器。

Android感應器概述(六)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.