Android Sensor Framework為應用程序提供了下面幾個類和接口:
應用程序調用 sensor 相關的 API 主要用來完成兩件事:
下面製作一個簡單的 apk,
列出手機上所有傳感器,
然後將所關心的那個傳感器數據顯示出來.
獲取傳感器列表,讀取數據代碼:
//get sensor manager
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//show sensor list
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
System.out.println("get sensor list:");
for (Sensor s: sensors) {
System.out.println("name:" + s.getName());
System.out.println("string_type:" + s.getStringType());
System.out.println("vendor:" + s.getVendor());
}
//gyro
Sensor mGyroSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
if (mGyroSensor == null) {
System.out.println("gyro sensor is null.");
mViewGyro.setText("gyro sensor is null.");
}
mSensorManager.registerListener(new SensorEventListener() {
long last_ts = 0;
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
String string = "sensor_gyro=(
" + new DecimalFormat("0.00").format(sensorEvent.values[0]) +
"," + new DecimalFormat("0.00").format(sensorEvent.values[1]) +
"," + new DecimalFormat("0.00").format(sensorEvent.values[2]) +
")\nts=" + sensorEvent.timestamp + "\ninterval=" +
(sensorEvent.timestamp - last_ts)/1000/1000 + "ms";
last_ts = sensorEvent.timestamp;
//System.out.println(string);
mViewGyro.setText(string);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
System.out.println("onAccuracyChanged.");
}
},mGyroSensor,sample_type);
只要把上述的程式碼編譯成 apk 放到手機上,
就可以看到旋轉手機的時候,讀取到的數值也跟著改變。
應用就先稍微貼一個範例囉!
下一篇我們再來好好深入探討 framework 層的服務程式碼。
Sensors Overview | Android Developers