編輯:關於Android編程
android動作傳感器
Android平台支持一些用於監視設備動作的傳感器(這樣的傳感器共有5個)。其中兩個(加速傳感器和陀螺儀傳感器)是純的硬件傳感器。另外三個(重力傳感器、線性加速傳感器和旋轉向量傳感器)可能是硬件傳感器,也可能是軟件傳感器。例如,在一些Android設備中,這些基於軟件的傳感器會從加速和磁力傳感器中獲取數據,但在另一些Android設備中也可能從陀螺儀傳感器中獲取數據。也就是說,同一種基於軟件的傳感器在不同的Android設備中回傳的數據可能來自不同的硬件傳感器。所以基於軟件的同一種傳感器在不同的設備中可能精確度、使用范圍有所不同。大多數高端Android設備都會有加速傳感器,還有一些擁有陀螺儀傳感器。
動作傳感器對於監測設備的移動非常有用,例如,傾斜、震動、旋轉和擺動都屬於動作傳感器的監測范圍。設備的移動通常是對用戶輸入的直接反應。例如,用戶正在游戲中飙車,或控制游戲中的一個小球)。除此之外,設備所處的物理環境也會反應在設備的動作上,例如,用戶正常駕駛汽車,而這是Android設備正安靜地躺在旁邊的座椅上,盡管設備沒有移動,但會隨著車的行駛而不斷震動,而且設備也會隨著汽車的移動而移動。
對於第一種情況,可以對設備本身的相對位置進行監測。而對於第二種情況,需要考慮到設備以外的參照系。動作傳感器本身一般並不會用於監測設備的位置,關於設備的位置需要用其他類型的傳感器進行監測,例如,磁場傳感器。
所有的動作傳感器都會返回三個浮點數的值(通過長度為3的數組返回),但對於不同的傳感器,這三個只的意義不同。例如,對於加速傳感器,會返回三個坐標軸的數據。對於陀螺儀傳感器,會返回三個坐標軸的旋轉角速度。
設備從左到右推動,X軸加速度為正值。
設備朝著自己推動,Y軸加速度為正值。
如果朝著天空以A m/s^2的加速度推動,那麼Z軸的加速度為A + 9.81,所以如果計算實際的加速度(抵消重力加速度),需要減9.81。
view:
pupublic class MainActivity extends ActionBarActivity implements SensorEventListener{ private TextView sensor=null; private SensorManager mSensorManager; private TextView gravityTV=null; private float[] gravity=new float[3]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensor= (TextView) findViewById(R.id.sensor); mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),//加速度傳感器, SensorManager.SENSOR_DELAY_UI);//SensorManager.SENSOR_DELAY_UI采樣頻率 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),//重力傳感器, SensorManager.SENSOR_DELAY_FASTEST);//SensorManager.SENSOR_DELAY_UI采樣頻率 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),//鄰近傳感器 SensorManager.SENSOR_DELAY_UI); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this);//卸載所有的傳感器 } //傳感度狀態發生變化 @Override public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType()){ case Sensor.TYPE_ACCELEROMETER: //加速度傳感器 //減雜音(干擾) final float alpha=(float)0.8; gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0]; gravity[1]=alpha*gravity[1]+(1-alpha)*event.values[1]; gravity[2]=alpha*gravity[2 ]+(1-alpha)*event.values[2]; String accelerometer=String.valueOf("X:"+(event.values[0]-gravity[0])+"\nY:"+ (event.values[1]-gravity[1])+"\nZ:"+ (event.values[2]-gravity[2])); sensor= (TextView) findViewById(R.id.sensor); sensor.setText(accelerometer); Log.i("X:", String.valueOf((event.values[0] - gravity[0]))); Log.i("Y:", String.valueOf((event.values[1] - gravity[1]))); Log.i("Z:", String.valueOf((event.values[2]-gravity[2]))); break; case Sensor.TYPE_GRAVITY: gravity[0]=event.values[0]; gravity[1]=event.values[1]; gravity[2]=event.values[2]; gravityTV= (TextView) findViewById(R.id.gravity); gravityTV.setText(String.valueOf("gravity[0]="+event.values[0]+ "\ngravity[1]="+event.values[1]+ "\ngravity[2]="+event.values[2])); break; case Sensor.TYPE_PROXIMITY: TextView Proximity= (TextView) findViewById(R.id.PROXIMITY1); Proximity.setText(String.valueOf(event.values[0])); break; } } //精確度發生變化 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }
1、概述 眾所周知,Activity在不明確指定屏幕方向和configChanges時,當用戶旋轉屏幕會重新啟動。當然了,應對這種情況,Android給
Gson 是 Google 官方提供的用來在 Java 對象和 JSON 之間進行互相轉換的Java類庫。我之前在使用Eclipse開發Android的時候,並沒有經常使
在Android系統中提供了多種存儲技術.通過這些存儲技術可以將數據存儲在各種存儲介質上.比如sharedpreferences可以將數據保存著應用軟件的私有存儲區,這些
RxJava(響應式編程) RxJava 在 GitHub 主頁上的自我介紹是 “a library for composing asynchronous a