Android---57---传感器

Android系统提供了对传感器的支持。

开发应用传感器很简单,只需要为指定监听器注册一个监听器即可。

步骤:

1.调用Context的getSystemService(Context.SENSOR_SERVICE)方法 获取SensorManager对象,SensorManager对象代表系统的传感器管理服务

2.调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器

3.通常选择在Activity的onResume()方法中调用SensorManager的registerListener()为指定传感去注册监听即可。

程序通过实现监听器即可获取传感器传回来的数据。

SensorManager提供的注册传感器的方法为:registerListener(SensorEventListener listener,Sensor sensor ,int rate ):

参数:

listener:

监听传感器的监听器。该监听器需要实现SensorEventListener接口

sensor:传感对象

rate:指定获取传感器数据的频率。

有如下几个频率:

SensorManager.SENSOR_DELAY_FASTEST:

最快,延迟最小,只有特别依赖于传感器数据的应用推荐采用这种频率。

SensorManager.SENSOR_DELAY_GAME:

适合游戏的频率。在一般实用性的应用上适合使用这种频率。

SensorManager.SENSOR_DELAY_NORMAL:

正常频率。一般实时性要求不是特别高的应用上适合使用。

SensorManager.SENSOR_DELAY_UI:

适合普通用户界面的频率。普通小程序中使用。

Android常用的传感器:

方向、磁场、温度、光、压力。

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.sensor.MainActivity" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/orientation" />

    <EditText
        android:id="@+id/etOrientation"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/magnetic" />

    <EditText
        android:id="@+id/etMagnetic"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/temperature" />

    <EditText
        android:id="@+id/etTemerature"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/light" />

    <EditText
        android:id="@+id/etLight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/pressure" />

    <EditText
        android:id="@+id/etPressure"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false" />

</LinearLayout>

Activity:

public class MainActivity extends Activity implements SensorEventListener {

	// 定义SensorManager
	SensorManager mSensorManager;
	// 方向
	EditText etOrientation;
	// 磁场
	EditText etMagnetic;
	// 温度
	EditText etTemerature;
	// 光
	EditText etLight;
	// 压力
	EditText etPressure;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		etOrientation = (EditText) findViewById(R.id.etOrientation);
		etMagnetic = (EditText) findViewById(R.id.etMagnetic);
		etTemerature = (EditText) findViewById(R.id.etTemerature);
		etLight = (EditText) findViewById(R.id.etLight);
		etPressure = (EditText) findViewById(R.id.etPressure);

		// 获取传感器管理服务
		mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 为方向传感器注册监听器
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
				SensorManager.SENSOR_DELAY_GAME);
		// 为系统的磁场传感器注册监听器
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
				SensorManager.SENSOR_DELAY_GAME);
		// 为系统的温度传感器注册监听器
		mSensorManager.registerListener(this, mSensorManager
				.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),
				SensorManager.SENSOR_DELAY_GAME);
		// 为系统的光传感器注册监听器
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
				SensorManager.SENSOR_DELAY_GAME);
		// 为系统的压力传感器注册监听器
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
				SensorManager.SENSOR_DELAY_GAME);
	}

	@Override
	protected void onStop() {
		mSensorManager.unregisterListener(this);
		super.onStop();
	}

	@Override
	protected void onPause() {
		mSensorManager.unregisterListener(this);
		super.onPause();
	}

	// 以下是实现SensorEventListener接口必须实现的方法

	@Override
	public void onSensorChanged(SensorEvent event) {
		float values[] = event.values;
		int sensorType = event.sensor.getType();
		StringBuilder sb = new StringBuilder();
		switch (sensorType) {
		// 方向传感器
		case Sensor.TYPE_ORIENTATION:
			sb = new StringBuilder();
			sb.append("绕Z轴转过的角度:");
			sb.append(values[0]);
			sb.append("\n绕X轴转过的角度:");
			sb.append(values[1]);
			sb.append("\n绕Y轴转过的角度:");
			sb.append(values[2]);
			etOrientation.setText(sb.toString());
			break;
		// 磁场传感器
		case Sensor.TYPE_MAGNETIC_FIELD:
			sb = new StringBuilder();
			sb.append("X方向上的角度:");
			sb.append(values[0]);
			sb.append("\nY方向上的角度:");
			sb.append(values[1]);
			sb.append("\nZ方向上的角度:");
			sb.append(values[2]);
			etMagnetic.setText(sb.toString());
			break;
		// 温度传感器
		case Sensor.TYPE_AMBIENT_TEMPERATURE:
			sb = new StringBuilder();
			sb.append("当前温度为:");
			sb.append(values[0]);
			etTemerature.setText(sb.toString());
			break;
		// 光传感器
		case Sensor.TYPE_LIGHT:
			sb = new StringBuilder();
			sb.append("当前光的强度为:");
			sb.append(values[0]);
			etLight.setText(sb.toString());
			break;
		// 压力传感器
		case Sensor.TYPE_PRESSURE:
			sb = new StringBuilder();
			sb.append("当前压力为:");
			sb.append(values[0]);
			etPressure.setText(sb.toString());
			break;
		default:
			break;
		}
	}

	// 当传感器精度改变时回调该方法
	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub

	}

}
时间: 2024-11-10 15:56:13

Android---57---传感器的相关文章

Android中传感器Sensor的使用

Android中传感器Senso的使用 1.Sensor类型 Android中有多种传感器,目前Android SDK支持的传感器有:光线传感器,旋转向量传感器,压力传感器,陀螺仪传感器,加速度传感器,重力传感器,方向传感器,磁场传感器,近程传感器等.但并不是所有手机都具有全部传感器,一般高端手机具有大多数传感器,毕竟传感器都需要money的,价格自然不菲. 2.Sensor实际应用  那么在Android开发中,如何使用传感器,将传感器功能添加到Android应用中呢,例如微信的摇一摇,通过加

Android加速度传感器

Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9065313 步骤 传感器使用步骤之前已经介绍过,地址:http://blog.csdn.net/q4878802/article/details/48112477 代码 package com.example.kongqw.kqwsensorforaccelerometerdemo;

Android开发:Android设备传感器开发总结

本文中,笔者给大家分享一下Android中如何进行Android设备传感器开发. 转载请注明作者xiong_it和链接:http://blog.csdn.net/xiong_it/article/details/45917009 Android传感器开发基本流程 public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; pr

修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题

问题:XE8 for Android 方向传感器无法正常运作(在 XE7 是正常的) 测试:官方示例 Samples\Object Pascal\Mobile Snippets\OrientationSensor\ 适用:XE8 for Android 修复方法: 请将源码 System.Android.Sensors.pas 复制到自己的工程目录里,再进行修改. 修改下面代码: constructor TAndroidNativeLightSensor.Create(AManager: TSe

创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

 这个手册描述了使用Qt Quick面访的方式在Android和ios设备上开发QtQuick应用程序的方法.我们使用Qt Creator实现一个QtQuick应用程序,这个应用程序基于加速器的值来加速一个SVG(可伸缩矢量图形). 设置开发环境: 要想能够在移动设备上构建和运行一个应用程序,您必须为设备平台设置开发环境,配置Qt Creator和手机设备之间的连接. 要想部署到Android设备,您必须下载和安装最新的Android NDK和SDK.更新SDK去获取为开发所需的API和工具

Android加速度传感器的使用:摇一摇功能的实现

一.原理介绍: Android手机中摇一摇的功能已经很常见了,最近接触到了这个功能,原理很简单:使用加速度传感器,在晃动手机时,监听加速度在各个方向的变化,当加速度值超过设定的灵敏度时,则触发摇一摇功能. 二.使用到的类: SensorManager SensorEventListener 三.功能实现: 1.摇一摇功能:我将摇一摇功能封装成了一个类ShakeUtils,在使用时按照注释中的说明使用即可,ShakeUtils.java如下(差的包请CTRL+SHIFT+O导入): /** * 摇

面面具到!android重力传感器

前两篇都是向大家介绍了很有意思的两种手势操作,嵌入我们游戏中,不得不说让游戏的自由度.可玩性和趣味性都增色不少!那么今天继续给大家介绍一亮点!传感器! 一:什么是传感器: 所谓传感器能够探测如光.热.温度.重力.方向 等等的功能! 二:Android中提供传感器有哪些: 1.加速度传感器(重力传感器)2.陀螺仪传感器3.光传感器5.恒定磁场传感器6.方向传感器7.恒定的压力传感器8.接近传感器9.温度传感器 今天我们给大家介绍的是游戏开发中最最常见的,用到的频率最高的一种传感器,加速度传感器(重

关于android方向传感器的使用

Android2.2以后 orientation sensors 就被deprecated了 官方建议用acceleration and magnetic sensor 来算 关于这个问题,CSDN上一篇博文讲的非常好 http://blog.csdn.net/flowingflying/article/details/43233315 stack overflow上: http://stackoverflow.com/questions/10291322/what-is-the-alterna

Android加速度传感器实现“摇一摇”,带手机振动

由于代码有点多,所以就分开写了,注释还算详细,方便学习 Activity package com.lmw.android.test; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; import android.view.View; import android.widget.Toast; import com.lmw.and

Android Sensor——传感器

Android SDK 支持的传感器类型,在Sensor类中的定义: 01.TYPE_ACCELEROMETER  : 加速传感器(硬件) 02.TYPE_AMBIENT_TEMPERATURE : 温度传感器(硬件) 03.TYPE_GRAVITY : 重力传感器(硬件或软件) 04.TYPE_GYROSCOPE : 陀螺仪传感器(硬件) 05.TYPE_LIGHT : 光线传感器(硬件) 06.TYPE_LINEAR_ACCELERATION : 线性加速传感器(硬件或软件) 07.TYPE