Android傳感器教程
傳感器 可以用來監測設備的三維運動或環境變化。愛掏網 - it200.com
Android提供了傳感器API來處理不同類型的傳感器。愛掏網 - it200.com
Android支持三種類型的傳感器:
1) 運動傳感器
用于測量沿三個軸的加速力和旋轉力。愛掏網 - it200.com
2) 位置傳感器
用于測量設備的物理位置。愛掏網 - it200.com
3) 環境傳感器
用于測量環境的變化,如溫度、濕度等。愛掏網 - it200.com
Android傳感器API
Android傳感器API提供了許多類和接口。愛掏網 - it200.com傳感器API的重要類和接口如下:
1) SensorManager類
android.hardware.SensorManager 類提供了以下方法:
- 獲取傳感器實例,
- 訪問和列出傳感器,
- 注冊和注銷傳感器監聽器等。愛掏網 - it200.com
您可以通過調用getSystemService()方法并將SENSOR_SERVICE常量傳遞給它來獲取SensorManager的實例。愛掏網 - it200.com
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
2) 傳感器類
android.hardware.Sensor 類提供了獲取傳感器信息的方法,例如傳感器名稱、傳感器類型、傳感器分辨率等。愛掏網 - it200.com
3) 傳感器事件類
其實例由系統創建。愛掏網 - it200.com它提供有關傳感器的信息。愛掏網 - it200.com
4) 傳感器事件監聽接口
它提供了兩個回調方法,用于獲取傳感器值 (x、y 和 z) 更改或傳感器精度更改的信息。愛掏網 - it200.com
公共和抽象方法 | 描述 |
---|---|
void onAccuracyChanged(Sensor sensor, int accuracy) | 當傳感器的精度發生變化時調用此方法。愛掏網 - it200.com |
void onSensorChanged(SensorEvent event) | 當傳感器的值發生變化時調用此方法。愛掏網 - it200.com |
Android簡單的傳感器應用示例
讓我們看看兩個傳感器示例。愛掏網 - it200.com
- 打印x、y和z軸值的傳感器示例。愛掏網 - it200.com在這里,我們將要看到這個。愛掏網 - it200.com
- 當設備被搖晃時改變背景顏色的傳感器示例。愛掏網 - it200.com點擊以 改變活動傳感器示例的背景顏色
activity_main.xml
這個文件中只有一個TextView。愛掏網 - it200.com
<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="92dp"
android:layout_marginTop="114dp"
android:text="TextView" />
</RelativeLayout>
Activity類
讓我們編寫代碼,打印出x軸、y軸和z軸的值。愛掏網 - it200.com
package com.example.sensorsimple;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.hardware.Sensor;
import java.util.List;
public class MainActivity extends Activity {
SensorManager sm = null;
TextView textView1 = null;
List list;
SensorEventListener sel = new SensorEventListener(){
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
textView1.setText("x: "+values[0]+"\ny: "+values[1]+"\nz: "+values[2]);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* Get a SensorManager instance */
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
textView1 = (TextView)findViewById(R.id.textView1);
list = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
if(list.size()>0){
sm.registerListener(sel, (Sensor) list.get(0), SensorManager.SENSOR_DELAY_NORMAL);
}else{
Toast.makeText(getBaseContext(), "Error: No Accelerometer.", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onStop() {
if(list.size()>0){
sm.unregisterListener(sel);
}
super.onStop();
}
}
輸出:
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。