Android傳感器(加速度傳感器,磁場傳感器,光線傳感器,方向傳感器)

4e48 9年前發布 | 3K 次閱讀 Java Android

package mobile.android.sensor;

import java.util.List; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView;

public class Main extends Activity implements SensorEventListener { private TextView tvAccelerometer; private TextView tvMagentic; private TextView tvLight; private TextView tvOrientation; private TextView tvSensors;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 獲得SensorManager對象
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    // 注冊加速度傳感器
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_FASTEST);

    // 注冊磁場傳感器
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
            SensorManager.SENSOR_DELAY_FASTEST);

    // 注冊光線傳感器
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
            SensorManager.SENSOR_DELAY_FASTEST);

    // 注冊方向傳感器
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
            SensorManager.SENSOR_DELAY_FASTEST);

    tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
    tvMagentic = (TextView) findViewById(R.id.tvMagentic);
    tvLight = (TextView) findViewById(R.id.tvLight);
    tvOrientation = (TextView) findViewById(R.id.tvOrientation);
    tvSensors = (TextView) findViewById(R.id.tvSensors);

    // 獲得當前手機支持的所有傳感器
    List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
    for (Sensor sensor : sensors) {
        // 輸出當前傳感器的名稱
        tvSensors.append(sensor.getName() + "\n");
    }
}

@Override
public void onSensorChanged(SensorEvent event) {
    // 通過getType方法獲得當前傳回數據的傳感器類型
    switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER: // 處理加速度傳感器傳回的數據
        String accelerometer = "加速度\n" + "X:" + event.values[0] + "\n"
                + "Y:" + event.values[1] + "\n" + "Z:" + event.values[2]
                + "\n";
        tvAccelerometer.setText(accelerometer);
        break;
    case Sensor.TYPE_LIGHT: // 處理光線傳感器傳回的數據
        tvLight.setText("亮度:" + event.values[0]);
        break;
    case Sensor.TYPE_MAGNETIC_FIELD: // 處理磁場傳感器傳回的數據
        String magentic = "磁場\n" + "X:" + event.values[0] + "\n" + "Y:"
                + event.values[1] + "\n" + "Z:" + event.values[2] + "\n";
        tvMagentic.setText(magentic);
        break;
    case Sensor.TYPE_ORIENTATION: // 處理方向傳感器傳回的數據
        String orientation = "方向\n" + "X:" + event.values[0] + "\n" + "Y:"
                + event.values[1] + "\n" + "Z:" + event.values[2] + "\n";
        tvOrientation.setText(orientation);
        break;
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

}</pre>

 本文由用戶 4e48 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!