Android传感器编程实例开发——三轴数据采集

来源:互联网 发布:linux find 绝对路径 编辑:程序博客网 时间:2024/06/06 09:42

Android传感器编程实例开发——三轴数据采集

一、概述

Android支持的传感器种类越来越多,这是一件非常可喜的事情,本节就来介绍一下在Android系统下的传感器编程。Android,让我们再一次看到了你的强大!会让我们更加坚定学习Android开发的信心!

二、要求

了解、熟悉传感器的编程方法。

三、实现

新建工程MySensor,修改/res/layout/main.xml文件,在里面添加一个SurfaceView,完整的main.xml文件如下:

1<?xml version="1.0" encoding="utf-8"?>
        2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        3        android:layout_width="fill_parent"
        4        android:layout_height="fill_parent"
        5        android:orientation="vertical">
        6
        7<SurfaceView
        8android:id="@+id/surfaceview"
        9                android:layout_width="fill_parent"
        10              android:layout_height="180dip"
        11/>
        12
        13
        14</LinearLayout>

接着,修改MySensorActivity.java文件,代码中有详细注释,完整的MySensorActivity.java文件如下:

1package com.nan.sensor;
        2
        3import android.app.Activity;
        4import android.graphics.Canvas;
        5import android.graphics.Color;
        6import android.graphics.Paint;
        7import android.graphics.Rect;
        8import android.hardware.Sensor;
        9import android.hardware.SensorEvent;
        10import android.hardware.SensorEventListener;
        11import android.hardware.SensorManager;
        12import android.os.Bundle;
        13import android.view.SurfaceHolder;
        14import android.view.SurfaceView;
        15
        16publicclass MySensorActivity extends Activity
        17 {
        18privatefloat acceValusX = 0f;
        19privatefloat acceValusY = 0f;
        20privatefloat acceValusZ = 0f;
        21privateint x = 0;
        22
        23private SurfaceView mSurfaceView = null;
        24private SurfaceHolder mSurfaceHolder = null;
        25private Paint mPaint = null;
        26
        27private SensorManager mSensorManager;
        28private Sensor mAccelerometer;
        29private OnSensorEventListener mOnSensorEventListener = new OnSensorEventListener();
        30
        31/** Called when the activity is first created. */
        32        @Override
        33publicvoid onCreate(Bundle savedInstanceState) 
        34
        35        {
        36super.onCreate(savedInstanceState);
        37                setContentView(R.layout.main);
        38
        39                mSurfaceView = (SurfaceView)findViewById(R.id.surfaceview);
        40                mSurfaceHolder = mSurfaceView.getHolder();
        41                mSurfaceHolder.addCallback(new MyHolder());
        42
        43                mPaint = new Paint(); 
        44//画笔的粗细
        45                mPaint.setStrokeWidth(1.0f);
        46//从系统服务中获得传感器管服务
        47                mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        48                mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        49//注册传感器监听
        50                mSensorManager.registerListener(mOnSensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
        51        }
        52
        53
        54privateclass OnSensorEventListener implements SensorEventListener
        55        {
        56
        57                @Override
        58publicvoid onAccuracyChanged(Sensor sensor, int accuracy)
        59                {
        60// TODO Auto-generated method stub
        61
        62                }
        63
        64                @Override
        65publicvoid onSensorChanged(SensorEvent event) 
        66                {
        67// TODO Auto-generated method stub
        68
        69//获得x轴的值
        70                        acceValusX = event.values[0];
        71//获得y轴的值
        72                        acceValusY = event.values[1];
        73//获得z轴的值
        74                        acceValusZ = event.values[2];
        75
        76//锁定整个SurfaceView
        77                        Canvas mCanvas = mSurfaceHolder.lockCanvas();
        78try
        79                        {
        80if(mCanvas!=null)
        81                                {
        82//画笔的颜色(红)
        83                                        mPaint.setColor(Color.RED);
        84//画X轴的点
        85                                        mCanvas.drawPoint(x, (int)(30 + acceValusX), mPaint);
        86//画笔的颜色(绿)
        87                                        mPaint.setColor(Color.GREEN);
        88//画Y轴的点
        89                                        mCanvas.drawPoint(x, (int)(60 + acceValusY), mPaint);
        90//画笔的颜色(蓝)
        91                                        mPaint.setColor(Color.BLUE);
        92//画Z轴的点
        93                                        mCanvas.drawPoint(x, (int)(90 + acceValusZ), mPaint);
        94//横坐标+1
        95                                        x++;
        96//如果已经画到了屏幕的最右边
        97if(x > getWindowManager().getDefaultDisplay().getWidth())
        98                                        {
        99                                                x = 0;
        100//清屏
        101                                                mCanvas.drawColor(Color.BLACK);
        102                                        }
        103//绘制完成,提交修改
        104                                        mSurfaceHolder.unlockCanvasAndPost(mCanvas);
        105                                }
        106                        }
        107catch(Exception e)
        108                        {
        109                                e.printStackTrace();
        110                        }
        111finally
        112                        {
        113if(mCanvas!=null)
        114                                {
        115//重新锁一次
        116                                        mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));
        117                                        mSurfaceHolder.unlockCanvasAndPost(mCanvas);
        118                                }
        119                        }
        120
        121                }
        122
        123        }
        124
        125
        126//定义一个类,实现Callback接口
        127publicclass MyHolder implements SurfaceHolder.Callback
        128        {
        129
        130publicvoid surfaceChanged(SurfaceHolder holder, int format, int width,
        131int height) 
        132                {
        133// TODO Auto-generated method stub
        134//add your code
        135                }
        136
        137publicvoid surfaceCreated(SurfaceHolder holder) 
        138                {
        139// TODO Auto-generated method stub
        140//add your code
        141                }
        142
        143publicvoid surfaceDestroyed(SurfaceHolder holder) 
        144                {
        145// TODO Auto-generated method stub
        146//add your code
        147                }
        148
        149        }
        150
        151        @Override
        152publicvoid onDestroy()
        153        {
        154super.onDestroy();
        155//注销传感器监听
        156                mSensorManager.unregisterListener(mOnSensorEventListener, mAccelerometer);
        157        }
        158
        159 }

好了,在真机上运行它,效果如下

晃动手机几下,效果如下:

完成。

0 0