关注嵌入式安卓物联网行业及人才培养,每日更新,欢迎订阅及留言讨论~~~

作者:倪键树,嵌入式安卓物联网讲师。



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

一、概述

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

二、要求

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

三、实现

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

1<?xmlversion="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
14LinearLayout>

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


1package com.nan.sensor;
2
3importandroid.app.Activity;
4importandroid.graphics.Canvas;
5importandroid.graphics.Color;
6importandroid.graphics.Paint;
7importandroid.graphics.Rect;
8importandroid.hardware.Sensor;
9import android.hardware.SensorEvent;
10importandroid.hardware.SensorEventListener;
11importandroid.hardware.SensorManager;
12importandroid.os.Bundle;
13importandroid.view.SurfaceHolder;
14importandroid.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 firstcreated. */
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 implementsSensorEventListener
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       CanvasmCanvas = 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 }

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

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

完成。



更多相关文章

  1. Android高手进阶教程(二十三)之---Android中的日历读写操作!!!
  2. Android高手进阶教程(二十三)之---Android中的日历读写操作!!!
  3. Android(安卓)WebView与JavaScript交互实现Web App
  4. Android高手进阶教程(二十三)之---Android中的日历读写操作!!!
  5. 自定义实现圆形播放进度条(android,飞一般的感觉)
  6. android:padding和android:layout_margin的区别
  7. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  8. Android使用第三方SDK——百度地图
  9. Android高手进阶教程(三)之----Android(安卓)中自定义View的应用

随机推荐

  1. Android加载html代码和文件
  2. IntentService使用、原理
  3. Android(安卓)Studio编译提示警告xxx已过
  4. android Material Design Toolbar
  5. 分享Android(安卓)CellLocation源码,基于R
  6. Android中ContentValues用法
  7. Android(安卓)Animation学习笔记
  8. 初级学习android的相关准备工作和学习的
  9. 由sqlite在手机上的存储位置,引发的onCrea
  10. Eclipse快捷键设置(转载)