我的物联网之路-Android手机传感器概况(地磁为主)
2016-12-20 22:22
253 查看
前言:本文主要以地磁为主介绍android的传感器类型,以及使用方法,再提供一个简单的demo供新手进行测试。研究生方向主要是物联网方向,虽然刚接触不久,但也有个大致的概念,本文算是开山之作—_—,之后还是想在这里记录一下整个研究的过程,不过大部分是代码类的,一些实用的技术。大神请飘过(哪一天不说这句我就是大神了—_—!)
引用:无线定位是指利用无线电波信号的特征参数估计特定物体在某种参考系中的坐标位置。在无线定位方向,android很多传感器都是值得我们研究的,这其中就包括地磁传感器和加速度传感器等。
(参考之博文-点击打开http://www.2cto.com/kf/201501/367225.html)博文包含一些常用的传感器所检测的内容和值
一般在Activity的onResume()方法中调用SensorManager的registerListener()为指定传感器注册监听器即可。程序可以通过实现监听器即可获取传感器传回来的数据。
SersorManager提供的注册传感器的方法为registerListener(SensorListener listener, Sensor sensor, int rate)该方法中三个参数说明如下:
listener:监听传感器事件的监听器
sensor:传感器对象
rate:指定获取传感器数据的频率
rate可以获取传感器数据的频率,支持如下几个频率值:
SENSOR_DELAY_FASTEST:最快,延迟最小。
SENSOR_DELAY_GAME:适合游戏的频率。
SENSOR_DELAY_NORMAL:正常频率
SENSOR_DELAY_UI:适合普通用户界面的频率。
SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
SENSOR_TYPE_ORIENTATION 3 //方向
SENSOR_TYPE_GYROSCOPE 4 //陀螺仪
SENSOR_TYPE_LIGHT 5 //光线感应
SENSOR_TYPE_PRESSURE 6 //压力
SENSOR_TYPE_TEMPERATURE 7 //温度
SENSOR_TYPE_PROXIMITY 8 //接近
SENSOR_TYPE_GRAVITY 9 //重力
SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量
MainActivity:
效果:
引用:无线定位是指利用无线电波信号的特征参数估计特定物体在某种参考系中的坐标位置。在无线定位方向,android很多传感器都是值得我们研究的,这其中就包括地磁传感器和加速度传感器等。
(参考之博文-点击打开http://www.2cto.com/kf/201501/367225.html)博文包含一些常用的传感器所检测的内容和值
1、传感器开发步骤
调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象。 调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器,见2中传感器类型的详情。
一般在Activity的onResume()方法中调用SensorManager的registerListener()为指定传感器注册监听器即可。程序可以通过实现监听器即可获取传感器传回来的数据。
SersorManager提供的注册传感器的方法为registerListener(SensorListener listener, Sensor sensor, int rate)该方法中三个参数说明如下:
listener:监听传感器事件的监听器
sensor:传感器对象
rate:指定获取传感器数据的频率
rate可以获取传感器数据的频率,支持如下几个频率值:
SENSOR_DELAY_FASTEST:最快,延迟最小。
SENSOR_DELAY_GAME:适合游戏的频率。
SENSOR_DELAY_NORMAL:正常频率
SENSOR_DELAY_UI:适合普通用户界面的频率。
2、传感器类型(int type)
SENSOR_TYPE_ACCELEROMETER 1 //加速度SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
SENSOR_TYPE_ORIENTATION 3 //方向
SENSOR_TYPE_GYROSCOPE 4 //陀螺仪
SENSOR_TYPE_LIGHT 5 //光线感应
SENSOR_TYPE_PRESSURE 6 //压力
SENSOR_TYPE_TEMPERATURE 7 //温度
SENSOR_TYPE_PROXIMITY 8 //接近
SENSOR_TYPE_GRAVITY 9 //重力
SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量
3、以地磁传感器为例进行测试
布局文件,主要为三个地磁的三个数据,x,y,z方向的地磁值,单位为uT:<TextView android:id="@+id/main_txt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_world" android:gravity="center" /> <TextView android:id="@+id/main_txt_x" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/main_txt" android:text="@string/hello_world" android:gravity="center" /> <TextView android:id="@+id/main_txt_y" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/main_txt_x" android:text="@string/hello_world" android:gravity="center" /> <TextView android:id="@+id/main_txt_z" android:layout_below="@id/main_txt_y" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_world" android:gravity="center" />
MainActivity:
public class MainActivity extends ActionBarActivity implements SensorEventListener {//主类直接实现传感器事件监听器 //声明布局文件中的标题TextView和三个显示地磁数值的TextView private TextView main_txt; private TextView main_txt_x; private TextView main_txt_y; private TextView main_txt_z; //声明传感器管理对象 private SensorManager sensorManger; //声明传感器对象 private Sensor magnetic_field_sensor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取到布局文件中的TextView对象 main_txt = (TextView) findViewById(R.id.main_txt); main_txt_x = (TextView) findViewById(R.id.main_txt_x); main_txt_y = (TextView) findViewById(R.id.main_txt_y); main_txt_z = (TextView) findViewById(R.id.main_txt_z); //从context中获得传感器管理对象 sensorManger = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //获得磁场传感器对象 magnetic_field_sensor = sensorManger.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); //注册传感器对象,此方法主要用在onResume中,此处直接在创建时使用 sensorManger.registerListener(this, magnetic_field_sensor, SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // 传感器精度发生变化时,调用此方法 Toast.makeText(this, "精度发生改变", Toast.LENGTH_LONG).show(); } @Override public void onSensorChanged(SensorEvent arg0) { // 传感器得到的数值 main_txt.setText("得到的地磁数值:"); main_txt_x.setText("X:"+arg0.values[0]+""); main_txt_y.setText("Y:"+arg0.values[1]+""); main_txt_z.setText("Z:"+arg0.values[2]+""); } }
效果:
相关文章推荐
- Android 中支持的几种传感器(加速度、陀螺仪、亮度、地磁、方向、压力、近程、温度)
- Android推送通知的实现--通过 WebSphere MQ 遥测传输 (MQTT) 将 Android 手机引入物联网
- android开发(27) 看看我的手机里都有什么传感器
- 通过 WebSphere MQ 遥测传输 (MQTT) 将 Android 手机引入物联网 地址
- Android手机加速度传感器和方向传感器的应用
- 【首届Google暑期大学生博客分享大赛——2010 Andriod篇】物联网时代我心目中的Android手机
- 基于NFC智能手机(Android)的开发领域 物联网、金融、交通、游戏
- android 获取手机中所有的传感器Sensor类使用方法
- Android 利用方向传感器获得手机的相对角度
- Android学习之手机传感器的获取
- 通过 WebSphere MQ 遥测传输 (MQTT) 将 Android 手机引入物联网
- android 获取手机中所有的传感器Sensor类使用方法
- android SensorSimulator 使用传感器模拟器模拟手机中的传感器
- Android传感器汇总让你知道你的手机支持多少种传感器设备
- Android 利用方向传感器获得手机的相对角度
- Android 中支持的几种传感器(加速度、陀螺仪、亮度、地磁、方向、压力、近程、温度)
- android传感器学习之获取手机传感器
- Android安卓物联网三防工业手持终端与传统的安卓手机优势在那里?
- 获取Android手机设备中的传感器
- Android之路【1】为什么选择Android手机开发