`
nanjingjiangbiao_T
  • 浏览: 2739627 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android开发--传感器介绍

 
阅读更多

获取手机中的传感器的步骤为:

  1. 获取SensorManager对象
  2. 执行SensorManager对象的getDefaultSensor()方法获取Sensor对象,这里getDefaultSensor()方法要传递一个参数,指定具体的传感器类型
  3. 获取Sensor对象中的各种属性
下面给出获取手机内传感器的实现代码:
	Log.d("BruceZhang", "以下是你的手机里的传感器:");
				List<Sensor> sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);
				Log.d("BruceZhang", "--->");
				for(Sensor sensor: sensors){
					Log.d("BruceZhang", sensor.getName());
				}
				//通过使用getDefaultSensor方法获得一个特定的传感器
//				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

在知道怎么获取传感器之后,我们需要使用程序获取传感器的值,下面给出实例代码:
		SensorManager sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
				
				sensorManager.registerListener(new SensorEventListener() {
					
					/*
					 * SensorEvent event
					 * 一旦传感器感知外界条件发生变化,就会把相应的数据传递给这个对象
					 * 一般会把这个方法放在onCreate里,不用手动的去获取
					 */
					@Override
					public void onSensorChanged(SensorEvent event) {
						// TODO Auto-generated method stub
						float auc=event.accuracy;
						//这里的第一个元素代表的是光线的强度
						float lux=event.values[0];
						Log.d("BruceZhang", auc+"");
						Log.d("BruceZhang", lux+"");
						
					}
					
					@Override
					public void onAccuracyChanged(Sensor sensor, int accuracy) {
						// TODO Auto-generated method stub
						
					}
				}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
				//SensorManager.SENSOR_DELAY_NORMAL
				//这个参数就是设置传感器的采样率
			}

传感器有一系列的属性:
1、传感器的采样率
a) SENSOR_DELAY_NOMAL (200000微秒)
b) SENSOR_DELAY_UI (60000微秒)
c) SENSOR_DELAY_GAME (20000微秒)
d) SENSOR_DELAY_FASTEST (0微秒)

2、传感器的属性
a) 传感器的名称
b) 传感器制造商
c) 传感器功率
d) 传感器的resulotion

获取这些属性的方法也很简单,代码如下:
SensorManager sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
				
				sensorManager.registerListener(new SensorEventListener() {
					
					@Override
					public void onSensorChanged(SensorEvent event) {
						// TODO Auto-generated method stub
						
						//传感器的名字
						String sensorName=event.sensor.getName();
						//传感器制造商的名字
						String sensorVendor=event.sensor.getVendor();
						//传感器的分辨率,传感器所能识别的最小的精度是多少
						float sensorRevolution=event.sensor.getResolution();
						//传感器的功率
						float sensorPower=event.sensor.getPower();
						//传感器取得数据的时间是多少
						double timeStamp=event.timestamp;
						
						//打印数据
						Log.d("BruceZhang", sensorName+"");
						Log.d("BruceZhang", sensorVendor+"");
						Log.d("BruceZhang", sensorRevolution+"");
						Log.d("BruceZhang", sensorPower+"");
						Log.d("BruceZhang", timeStamp+"");
					}
					
					@Override
					public void onAccuracyChanged(Sensor sensor, int accuracy) {
						// TODO Auto-generated method stub
						
					}
				}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
		
			}

下面实现的这个实例实现了上述内容的综合:
实例的完整代码如下:
/*
 * 传感器会通过传感器事件把值传给用户
 * 所以,我们的应用程序是被动的,等待传感器把数据传递给SensorEvent对象
 */
public class MainActivity extends Activity {
	private Button button;
	private Button button2;
	private Button button3;
	private SensorManager sensorManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//得到SensorManager对象
		sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
		
		button=(Button)findViewById(R.id.sensorButton);
		button2=(Button)findViewById(R.id.lightButton);
		button3=(Button)findViewById(R.id.lightButton2);
		
		button3.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SensorManager sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
				
				sensorManager.registerListener(new SensorEventListener() {
					
					@Override
					public void onSensorChanged(SensorEvent event) {
						// TODO Auto-generated method stub
						
						//传感器的名字
						String sensorName=event.sensor.getName();
						//传感器制造商的名字
						String sensorVendor=event.sensor.getVendor();
						//传感器的分辨率,传感器所能识别的最小的精度是多少
						float sensorRevolution=event.sensor.getResolution();
						//传感器的功率
						float sensorPower=event.sensor.getPower();
						//传感器取得数据的时间是多少
						double timeStamp=event.timestamp;
						
						//打印数据
						Log.d("BruceZhang", sensorName+"");
						Log.d("BruceZhang", sensorVendor+"");
						Log.d("BruceZhang", sensorRevolution+"");
						Log.d("BruceZhang", sensorPower+"");
						Log.d("BruceZhang", timeStamp+"");
					}
					
					@Override
					public void onAccuracyChanged(Sensor sensor, int accuracy) {
						// TODO Auto-generated method stub
						
					}
				}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
		
			}
			
		});
		
		button2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SensorManager sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
				
				sensorManager.registerListener(new SensorEventListener() {
					
					/*
					 * SensorEvent event
					 * 一旦传感器感知外界条件发生变化,就会把相应的数据传递给这个对象
					 * 一般会把这个方法放在onCreate里,不用手动的去获取
					 */
					@Override
					public void onSensorChanged(SensorEvent event) {
						// TODO Auto-generated method stub
						float auc=event.accuracy;
						//这里的第一个元素代表的是光线的强度
						float lux=event.values[0];
						Log.d("BruceZhang", auc+"");
						Log.d("BruceZhang", lux+"");
						
					}
					
					@Override
					public void onAccuracyChanged(Sensor sensor, int accuracy) {
						// TODO Auto-generated method stub
						
					}
				}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
				//SensorManager.SENSOR_DELAY_NORMAL
				//这个参数就是设置传感器的采样率
			}
		});
		
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Log.d("BruceZhang", "以下是你的手机里的传感器:");
				List<Sensor> sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);
				Log.d("BruceZhang", "--->");
				for(Sensor sensor: sensors){
					Log.d("BruceZhang", sensor.getName());
				}
				//通过使用getDefaultSensor方法获得一个特定的传感器
//				Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
			}
		});
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}


分享到:
评论

相关推荐

    Android开发-指南针【多种传感器实现】

    在Android开发中,指南针应用是一种常见的功能,它利用设备内置的传感器来指示地球的磁场北。本项目提供了两种不同的实现方式,分别是基于方向传感器(Orientation Sensor)和基于加速度传感器与磁场传感器...

    Android E-compass sensor 传感器 高级绘图

    在Android开发中,E-compass(电子指南针)传感器是一个重要的组成部分,它允许应用获取设备的方向信息,基于地球的磁场来指示北向。本话题将深入探讨如何利用Android的高级Canvas绘图技术来呈现E-compass的数据,并...

    Android代码-android姿态传感器源代码.zip

    通过分析和学习这个源代码,开发者能够掌握如何在Android应用中有效使用姿态传感器,创建动态响应的用户界面,或者开发依赖于设备位置和运动的应用。同时,也能理解如何优化传感器数据处理,提高应用的性能和用户...

    Android代码-加速度传感器.rar

    `点这里查看更多优质源码~.url`可能是一个链接,指向更多Android开发示例或资源库。 总的来说,这个压缩包提供了学习和实践Android加速度传感器使用的基础,包括如何获取传感器数据以及如何处理这些数据。通过阅读...

    安卓开发-android姿态传感器源代码.zip.zip

    这份"安卓开发-android姿态传感器源代码.zip.zip"压缩包很可能是包含了一套完整的示例代码,用于演示如何在Android应用中接入并使用姿态传感器。以下是对这个主题的详细讲解: 1. **姿态传感器简介**: - 姿态...

    Android开发-Sensor传感器-AndroidStudio(二)小方

    在Android开发中,Sensor传感器是实现设备智能化和交互性的重要组成部分。本文将深入探讨如何在Android Studio环境下利用Sensor API进行传感器编程,这是Android开发-Sensor传感器系列教程的第二部分。 一、Android...

    Android开发-Sensor传感器-AndroidStudio(一)摇一摇

    在Android开发中,Sensor传感器是实现许多有趣功能的关键部分,比如运动检测、环境感知等。本文将深入探讨如何在Android Studio环境下使用Sensor API来实现一个基础的“摇一摇”功能,让应用能够识别用户的摇动操作...

    Android代码-重力传感器源码.zip

    在Android系统中,重力传感器是一种重要的硬件组件,它能够实时监测设备在三维空间中的重力分量。这个压缩包“Android代码-重力传感器源码.zip”很可能包含了一个示例项目,展示了如何在Android应用中接入并使用重力...

    Android开发实战经典-041105-传感器视频教程.zip

    Android开发实战经典_041105_传感器视频教程.zip

    于基android-的传感器技术应用开发---本科毕业设计.doc

    "基于 Android 的传感器技术应用开发" Android 作为一个流行的移动操作系统,具有广泛的应用前景,特别是在智能手机领域。随着智能手机的普及,基于 Android 的传感器技术应用开发也得到了越来越多的关注。本文...

    Android高级应用源码-android姿态传感器源代码.rar

    这个“Android高级应用源码-android姿态传感器源代码”压缩包显然包含了一个示例项目,展示了如何利用Android SDK中的传感器API来获取并处理姿态传感器的数据。以下是关于这个主题的详细知识点: 1. **姿态传感器**...

    Android移动开发-利用加速度传感器开发仿微信摇一摇功能的实现

    在Android移动开发中,加速度传感器(Accelerometer)是一个至关重要的硬件组件,它能够感知设备在三维空间中的运动和方向变化。这个传感器被广泛应用在各种创新功能中,其中最为人所知的就是微信的“摇一摇”功能。...

    Android高级应用源码-加速度传感器.zip

    下面将详细介绍加速度传感器在Android中的工作原理、API使用以及相关开发实践。 首先,加速度传感器是Android系统中的Sensor服务提供的一部分,通过`SensorManager`类来访问。在Android的`Sensor`类中,加速度...

    matlab开发-Android传感器数据采集位置传感器示例

    Android设备上的位置传感器,如GPS、Wi-Fi和蜂窝网络,能够提供实时的位置信息,这对于开发定位应用或者进行移动设备的数据分析非常有用。 首先,我们需要了解MATLAB的Android Sensor Interface。这个接口允许...

    安卓开发-加速度传感器.zip

    在Android平台上进行应用程序开发时,加速度传感器是一个重要的硬件接口,它允许开发者获取设备的运动和方向变化数据。本教程将深入探讨如何在Android中利用加速度传感器来创建功能丰富的应用。 1. **加速度传感器...

    平衡球-android demo-传感器

    在Android平台上,传感器技术是移动开发中的重要组成部分,它使得设备能够感知并处理周围环境的各种信息,例如重力、加速度、陀螺仪、光线等。"平衡球-android demo-传感器"是一个很好的学习实例,展示了如何在...

    Android高级应用源码-android姿态传感器源代码.zip

    在Android平台上,姿态传感器是移动设备中非常关键的一部分,它能够提供设备的三维空间方向信息。这份"Android高级应用源码-android...通过学习和理解这段代码,你可以提升在Android平台上的高级传感器应用开发能力。

Global site tag (gtag.js) - Google Analytics