編輯:Android編程入門
現在每部Android 手機裡面都會內置有許多的傳感器,它們能夠監測到各種發生在手機上的物理事件,而我們只要靈活運用這些事件就可以編寫出很多好玩的應用程序。今天我們開始簡單的傳感器使用的學習。
目錄導航:
一、 手機傳感器的介紹:
二、 手機基本支持的傳感器類型:
從Android1.5開始,系統內置了對多達八種傳感器的支持,他們分別是:加速度傳感器(accelerometer)、陀螺儀(gyroscope)、環境光照傳感器(light)、磁力傳感器(magnetic field)、方向傳感器(orientation)、壓力傳感器(pressure)、距離傳感器(proximity)和溫度傳感器(temperature)。
三、 傳感器的一些使用說明
String service_name = Context.SENSOR_SERVICE; SensorManager sensorManager = (SensorManager)getSystemService(service_name);
第一種:獲取某種傳感器的默認傳感器:
Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二種:獲取某種傳感器的列表:
List<Sensor> pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三種:獲取所有傳感器的列表:
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
四、 對於一個傳感器,信息的獲取:
方法 描述 getMaximumRange() 最大取值范圍 getName() 設備名稱 getPower() 功率 getResolution() 精度 getType() 傳感器類型 getVentor() 設備供應商 getVersion() 設備版本號
五、 現階段Android支持的常用傳感器有8種:
傳感器類型常量 內部整數值 中文名稱 Sensor.TYPE_ACCELEROMETER 1 加速度傳感器 Sensor.TYPE_MAGNETIC_FIELD 2 磁力傳感器 Sensor.TYPE_ORIENTATION 3 方向傳感器 Sensor.TYPE_GYROSCOPE 4 陀螺儀傳感器 Sensor.TYPE_LIGHT 5 環境光照傳感器 Sensor.TYPE_PRESSURE 6 壓力傳感器 Sensor.TYPE_TEMPERATURE 7 溫度傳感器 Sensor.TYPE_PROXIMITY 8 距離傳感器
我們創建一個傳感器的應用實例,項目結構如下:
一、 在MainActivity中初始化一些信息:
private final static String TAG = "SensorTest";
private TextView textView;
SensorManager sm = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
二、 得到手機上支持的所有傳感器類型:創建一個方法
// 顯示手機支持的傳感器的清單
public void allSensors(View view) {
//從系統服務中獲得傳感器管理器
//從傳感器管理器中獲得全部的傳感器列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
Log.i(TAG, "allsensors: " + allSensors.size());
//顯示每個傳感器的具體信息
for (Sensor sensor : allSensors) {
String name = sensor.getName();
String vendor = sensor.getVendor();
int version = sensor.getVersion();
Log.i(TAG, "name: " + name + ", vendor: " + vendor + ", version: " + version);
}
}
三、 光傳感器的簡單使用:
// 光照傳感器的使用
public void lightSensors(View view) {
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
sm.registerListener(LightListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
// 光照傳感器的事件
private SensorEventListener LightListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float value = event.values[0];
Sensor sensor = event.sensor;
textView.setText(value + "");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "on accuracy change: " + accuracy);
}
};
四、 加速度傳感器的簡單使用:
// 加速度傳感器
public void accelerSensors(View view) {
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(AcclerListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
// 加速度傳感器的事件
private SensorEventListener AcclerListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 加速度可能會是負值,所以要取它們的絕對值
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue > 15 || yValue > 15 || zValue > 15) {
// 認為用戶搖動了手機,觸發搖一搖邏輯
Toast.makeText(MainActivity.this, "搖一搖", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "on accuracy change: " + accuracy);
}
};
五、 在onDestory方法調用unregisterListener()方法來釋放使用的資源。
@Override
protected void onDestroy() {
super.onDestroy();
if (sm != null) {
sm.unregisterListener(LightListener);
sm.unregisterListener(AcclerListener);
}
}
六、 顯示結果:
allsensors: 27 name: Accelerometer, vendor: STMicroelectronics, version: 1 name: Magnetometer, vendor: AKM, version: 1 name: Magnetometer Uncalibrated, vendor: AKM, version: 1 name: Gyroscope, vendor: STMicroelectronics, version: 1 name: Gyroscope Uncalibrated, vendor: STMicroelectronics, version: 1 name: Proximity Sensor, vendor: TAOS, version: 1 name: Ambient Light Sensor, vendor: TAOS, version: 1 name: Barometer Sensor, vendor: BOSCH, version: 1 name: Temperature Sensor, vendor: BOSCH, version: 1 name: Gravity, vendor: Qualcomm, version: 1 name: Linear Acceleration, vendor: Qualcomm, version: 1 name: Rotation Vector, vendor: Qualcomm, version: 1 name: Step Detector, vendor: Qualcomm, version: 1 name: Step Counter, vendor: Qualcomm, version: 1 name: Significant Motion Detector, vendor: Qualcomm, version: 1 name: Game Rotation Vector, vendor: Qualcomm, version: 1 name: Geomagnetic Rotation Vector, vendor: Qualcomm, version: 1 name: Orientation, vendor: Qualcomm, version: 1 name: AMD, vendor: Qualcomm, version: 1 name: RMD, vendor: Qualcomm, version: 1 name: Basic Gestures, vendor: Qualcomm, version: 1 name: Facing, vendor: Qualcomm, version: 1 name: Tilt, vendor: Qualcomm, version: 1 name: Pedometer, vendor: Qualcomm, version: 1 name: PEDESTRIAN-ACTIVITY-MONITOR, vendor: Qualcomm, version: 1 name: Motion Accel, vendor: Qualcomm, version: 1 name: Temperature Sensor, vendor: BOSCH, version: 1
andorid 手機外部儲存操作
.xml<?xml version=1.0 encoding=utf-8?><LinearLayout xmlns:android=http://sch
Android Studio的基本使用
今天總結下這段時間對於android studio的使用情況,也對剛使用的朋友一些參考,之前一直使用Eclipse
如何開發Android Wear應用程序
Android Wear是連接安卓手機和可穿戴產品的一個平台。自從今年上半年發布以來,Android Wear獲得了大量關注,既有來自消費者的關注,也有來自開發商的關注,
android ipc通信機制之二序列化接口和Binder
IPC的一些基本概念,Serializable接口,Parcelable接口,已經Binder。此核心為最後的IBookManager.java類!!!Serializa