編輯:關於Android編程
監視傳感器事件
要監視原始的傳感器數據,你需要實現兩個通過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被掛起的時候。如果不這樣做,因為有些傳感器有很大的電量需求,因此會很快的消耗掉電池電量。在屏幕關閉的時候,系統不會自動的禁用傳感器。
先給大家展示下效果圖:不知道大家對效果圖感覺怎麼樣,個人覺還不錯,感興趣的朋友可以參考下實現代碼哦。public class ToggleButton extends V
導語手機直播一般都會通過移動屏幕來調節音量的大小,本篇只實現了圖例,並不能改變音量。先看效果:需要的素材:小喇叭圖片,點擊這裡獲取預熱如果你將這哥們的十幾篇帖子都看完了的
三種得到LinearInflater的方法a. LayoutInflater inflater = getLayoutInflater();b. LayoutInflat
Android應用開發的一項重要內容就是界面開發。對於用戶來說,不管APP包含的邏輯多麼復雜,功能多麼強大,如果沒有提供友好的圖形交互界面,將很難吸引最終用戶。作為一個程