Android方向传感器简单实用

来源:互联网 发布:720全景制作软件 编辑:程序博客网 时间:2024/05/22 07:47

传感器
传感器(英文名称:sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。

Android中常见的传感器

传感器类型 描述 SENSOR_TYPE_ACCELEROMETER 加速度 SENSOR_TYPE_MAGNETIC_FIELD 磁力 SENSOR_TYPE_ORIENTATION 方向 SENSOR_TYPE_GYROSCOPE 陀螺仪 SENSOR_TYPE_LIGHT 光线感应 SENSOR_TYPE_PRESSURE 压力 SENSOR_TYPE_TEMPERATURE 温度 SENSOR_TYPE_PROXIMITY 接近 SENSOR_TYPE_GRAVITY 重力 SENSOR_TYPE_LINEAR_ACCELERATION 线性加速度

粗糙指南针

public class CompassView extends View {    private Paint paint = new Paint();    private Path path;    private float angle;    public CompassView(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    public CompassView(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }    @Override    protected void onDraw(Canvas canvas) {        float centerX = getMeasuredWidth() / 2;        float centerY = getMeasuredHeight() / 2;        // 画文字        paint.reset();        paint.setAntiAlias(true);        paint.setColor(Color.BLUE);        paint.setTextSize(24);        canvas.drawText("" + angle, 20, 20, paint);        canvas.drawText("北", centerX, 30, paint);        canvas.drawText("南", centerX, getMeasuredHeight() - 30, paint);        canvas.drawText("西", 30, centerY, paint);        canvas.drawText("东", getMeasuredWidth() - 30, centerY, paint);        // 画箭头        if (path == null) {            path = new Path();            float x1 = centerX;            float y1 = centerY - 140;            float x2 = centerX - 30;            float y2 = centerY + 30;            float x3 = centerX;            float y3 = centerY + 10;            float x4 = centerX + 30;            float y4 = centerY + 30;            path.moveTo(x1, y1);// 移动到起始点            path.lineTo(x2, y2);// 连线            path.lineTo(x3, y3);// 连线            path.lineTo(x4, y4);// 连线            path.lineTo(x1, y1);// 连线            path.close();        }        canvas.save();        paint.reset();        paint.setAntiAlias(true);        paint.setColor(Color.RED);        canvas.rotate(angle, centerX, centerY);        canvas.drawPath(path, paint);        canvas.restore();    }    public void setAngle(float angle) {        this.angle = angle;        invalidate();    }}
public class MainActivity extends Activity {    private SensorManager manager;    private Sensor sensor;    private CompassView mCompassView;    private SensorEventListener listener = new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            // 数据改变的回调            float[] values = event.values;// 传感器给到的数据            // float light = values[0];            // System.out.println("light : " + light);            // values[0]: Azimuth, angle between the magnetic north direction            // and the y-axis, around the z-axis (0 to 359). 0=North, 90=East,            // 180=South, 270=West            float angle = values[0];            System.out.println("角度 : " + angle);            mCompassView.setAngle(angle);        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {            // 传感器的精度改变的回调        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        manager = (SensorManager) getSystemService(SENSOR_SERVICE);        // List<Sensor> list = manager.getSensorList(Sensor.TYPE_ALL);        // for (Sensor sensor : list) {        //        // System.out.println("传感器:" + sensor.getName());        // }        // rate : 采样的速率        sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);        mCompassView = (CompassView) findViewById(R.id.cv);    }    @Override    protected void onResume() {        super.onResume();        manager.registerListener(listener, sensor,                SensorManager.SENSOR_DELAY_NORMAL);    }    @Override    protected void onPause() {        super.onPause();        manager.unregisterListener(listener);    }}

参考:
Android传感器

0 0
原创粉丝点击