Android重力传感器代码

合集下载

Android传感器HAL头文件sensors.h详细注释

Android传感器HAL头文件sensors.h详细注释

Android传感器HAL头文件sensors.h详细注释/* Android Sensor HAL头文件分析笔记 */#ifndef ANDROID_SENSORS_INTERFACE_H /* 此宏的作用就是避免重复包含此头文件 */#define ANDROID_SENSORS_INTERFACE_H#include <stdint.h>#include <sys/cdefs.h>#include <sys/types.h>#include <hardware/hardware.h>#include <cutils/native_handle.h>/* 定义传感器头文件的版本 */#define SENSORS_HEADER_VERSION 1/* 下面这几个宏定义了传感器API的版本 */#defineSENSORS_MODULE_API_VERSION_0_1 HARDWARE_MODULE_A PI_VERSION(0, 1)#defineSENSORS_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_ VERSION_2(0, 1, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_ VERSION_2(1, 0, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_1 HARDWARE_DEVICE_API_ VERSION_2(1, 1, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_2 HARDWARE_DEVICE_API_ VERSION_2(1, 2, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_3 HARDWARE_DEVICE_API_ VERSION_2(1, 3, SENSORS_HEADER_VERSION)/*** 有关Android传感器类型的介绍和详细描述,请参考下面的网址,里面有详细的说明.* /devices/sensors/index.html*//* 传感器模块的ID,在写HAL模块时使用 */#define SENSORS_HARDWARE_MODULE_ID "sensors"/* 要打开的传感器设备的名称 */#define SENSORS_HARDWARE_POLL "poll"/*** Handles必须高于SENSORS_HANDLE_BASE,必须是唯一的;* 一个Handle标识给定的传感器. Handle用于启动和/或停用传感器* 在这个版本的API中,只能有256个Handle*/#define SENSORS_HANDLE_BASE 0#define SENSORS_HANDLE_BITS 8#defineSENSORS_HANDLE_COUNT (1<<SENSORS_HANDLE_BITS) /** **** 过时的东东 ****** flags for (*batch)()* Availability: SENSORS_DEVICE_API_VERSION_1_0* see (*batch)() documentation for details.* Deprecated as of SENSORS_DEVICE_API_VERSION_1_3.* WAKE_UP_* sensors replace WAKE_UPON_FIFO_FULL concept.*/enum {SENSORS_BATCH_DRY_RUN = 0x00000001,SENSORS_BATCH_WAKE_UPON_FIFO_FULL = 0x00000002 };/** meta_data_event_t的what字段使用的值*/enum {/* 上一次刷新操作已完成 */META_DATA_FLUSH_COMPLETE = 1,META_DATA_VERSION /* 总是最后一个,保留自动分配 */};/** 关于身体传感器使用的权限(比如,心率监测器).* 有关哪些传感器需要使用此权限,请参阅传感器类型获得更详细信息.*/#define SENSOR_PERMISSION_BODY_SENSORS "android.permission.BODY_SENSORS"/* 下面的枚举值只对"SENSORS_DEVICE_API_VERSION_1_3"版本有效;传感器标志,用于设置sensor_t结构体的flags成员,表示传感器的报告模式 */enum {/** 当数据可用时,传感器是否唤醒处于挂起模式的系统.每当从唤醒传感器传送传感器事件时,* 驱动程序需要持有唤醒锁,直到传感器服务读取事件,即直到下次调用sensors_poll_device_t.poll()函数;* 一旦poll函数再次被调用,这意味着传感器服务已经读取了事件,驱动程序可以安全地释放唤醒锁.* 传感器服务将继续持有唤醒锁,直到应用程序实际读取事件。

android 重力感应

android 重力感应

如何实现Android游戏开发之小球重力感应重力感应主要是依靠手机的加速度传感器(accelerometer)来实现、在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。

因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉。

还是得根据真机的实际情况来做开发,今天我们主要来讨论加速度传感器的具体实现方式。

传感器名称如下:加速度传感器(accelerometer)陀螺仪传感器(gyroscope)环境光照传感器(light)磁力传感器(magnetic field)方向传感器(orientation)压力传感器(pressure)距离传感器(proximity)温度传感器(temperature)1.SensorMannager传感器管理对象手机中的所有传感器都须要通过SensorMannager来访问,调用getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象。

SensorManager mSensorMgr = (SensorManager)getSystemService(SENSOR_SERVICE);2.实现SensorEventListener接口说道SensorEventListener接口就不得不说SensorListener接口。

在Android1.5一下是通过实现SensorListener接口来捕获手机传感器状态,但是在1.5以上如果实现这个接口系统会提示你这行代码已经过期。

今天我们不讨论SensorListener因为它已经是过时的东西了。

主要讨论一下SensorEventListener接口。

我们须要实现SensorEventListener这个接口onSensorChanged(SensorEvent event)方法来捕获手机传感器的状态,拿到手机X轴Y轴Z轴三个方向的重力分量,有了这三个方向的数据重力感应的原理我们就已经学会了,简单吧哇咔咔~~public void onSensorChanged(SensorEvent e) {float x = e.values[SensorManager.DATA_X];float y = e.values[SensorManager.DATA_Y];float z = e.values[SensorManager.DATA_Z]; }如图所示:上例代码中float x y z 3个方向的取值范围是在-10 到10 之间,我向同学们说明一下X轴Y轴Z轴重力分量的含义。

Android重力感应

Android重力感应

手机的感应器在Android里边所代表的类是Sensor,你只要看到在android.hardware这个包下边的都是封装的关于一些特殊的硬件方面的类,比如说Camera、Sensor之类的。

一直都很怀疑为什么HTC的Google手机没有前置摄像头。

怨念啊。

PS:虽然是2.1的机子,但是我用的是1.5的SDK。

代码很简单:我们首先要得到一个手机上的传感器。

Java代码1.SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);这行代码只要用过类似开发的都应该知道是什么。

getSystemService(String name)可以用来返回一个硬件设备的控制器。

比如说LocationManage(和GPS相关用来确定位置的)、TelephonyManage(查询电话相关内容,比如说IMEI码)、AudioManager(顾名思义,是视频播放用的)等等。

具体可以观看SDK文档里边Activity的讲解。

/int ... d/app/Activity.html得到重力感应的硬件控制了,然后我们就应该得到一个Sensor了。

Java代码1.Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ALL);关于这个参数。

其实挺复杂的。

我开始用的是TYPE_ALL,出的是XYZ三条轴线的偏移量,至于其他的大家可以看下边:下边是官方SDK中对于各种类型的解析(粗体红字是我加上去的)<!-- =========== ENUM CONSTANT SUMMARY =========== -->Constantsint TYPE_ACCELEROMETERA constant describing an accelerometer sensortype.加速度int TYPE_ALL A constant describing all sensor types.所有类型,NexusOne 默认为 加速度int TYPE_GYROSCOPE A constant describing a gyroscope sensor type 回转仪(这个不太懂)int TYPE_LIGHT A constant describing an light sensor type.光线感应吗int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.磁场int TYPE_ORIENTATION A constant describing an orientation sensor type.定向(指北针)和角度int TYPE_PRESSURE A constant describing a pressure sensor type 压力计int TYPE_PROXIMITY A constant describing an proximity sensor type.距离?不太懂int TYPE_TEMPERATURE A constant describing a temperature sensor type 温度啦然后就是我们需要即时了解手机的偏转度。

Android之Sensor 简介

Android之Sensor 简介
Android 之 Sensor 简介
1.Sensor Type 重力感应/加速度传感器 (G-Sensor) 光感应 (Light-Sensor) 温度感应 方向感应 磁场、 临近性
2.如何实现 Sensor 编程 a.获取系统服务(SENSOR_SERVICE)返回一个 SensorManager 对象 sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE); b.通过 SensorManager 对象获取相应的 Sensor 类型的对象 sensorObject = sensormanager.getDefaultSensor(sensor Type); c.声明一个 SensorEventListener 对象用于侦听 Sensor 事件,并重载
3.关于 G-Sensor Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER 通过 android.hardware.SensorEvent 返回加速度传感器值。 加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别
是 values[0]: x-axis 方向加速度 values[1]: y-axis 方向加速度 values[2]: z-axis 方向加速度
3.Window7 与 win xp 不同
Window7 下安装 SensorSimulator 的过程同上,但有点不同的地方时 adb 命令 不知道是 Android sdk 路径的问题还是其他的原因,在 Windows 7 下 CMD 命令下 无法执行 adb 命令, 需要找到 adb.exe 的文件路径下执行才可以.
该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包 括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只 提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。

安卓常用指令大全

安卓常用指令大全
*#*#3264#*#* –内存版本
*#*#197328640#*#*
启动服务模式,可以测试手机部分设置及更改设定
WLAN、GPS及蓝牙测试的代码
*#*#232339#*#*或*#*#526#*#*或*#*#528#*#* –WLAN测试
*#*#232338#*#* –显示WiFiMAC地址
*#*#1472365#*#* –GPS测试
*#0228# 手机状态信息,信号、温度、电压等 右键查看详细,返回键退出
以下未测试,慎用,慎用!
*7465625*638# 开启网络锁 (慎用)
#7465625*638*# 关除网络锁 (慎用)
*7465625*28746# 自动开启SIM 锁 (慎用)
*7465625*746# 开启SIM卡
安卓常用指令大全--好好收藏会用到的
*#0*# 工程测试 买机必测
第一行 三个原色测试
第二行 1声音 2振动 3亮度降低
第三行 1照相 2磁传感器 3触摸屏
第四行 1休眠模式 2重力感应
*#1111# 软件版本
*#1234# 固件版本
*#2222# 硬件版本
*#232337# 蓝牙设备地址
*#*#0*#*#* –LCD测试
*#*#0673#*#* 或 *#*#0289#*#* –Melody测试
*#*#0842#*#* –装置测试,例如振动、亮度
*#*#2663#*#* –触控屏幕版本
*#*#2664#*#* –触控屏幕测试
*#*#0588#*#* –接近感应器测试
*#*#1234#*#* –PDA及Phone
*#*#1111#*#* –FTASW版本

Android传感器代码

Android传感器代码

Android传感器代码详细说明各传感器调用方式,并附加详细的代码Android下调用传感器代码在这里介绍一下所写的在android下调用传感器的程序。

Android中支持的几种传感器:Sensor.TYPE_*****OMETER:加速度传感器。

Sensor.TYPE_*****PE:陀螺仪传感器。

Sensor.TYPE_LIGHT:亮度传感器。

Sensor.TYPE_*****C_FIELD:地磁传感器。

Sensor.TYPE_*****TION:方向传感器。

Sensor.TYPE_*****E:压力传感器。

Sensor.TYPE_*****TY:近程传感器。

Sensor.TYPE_*****TURE:温度传感器。

使用传感器最关键的一些知识是:SensorManager是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。

我们可以通过getSystemService方法来取得一个SensorManager对象。

使用传感器时,需要通过registerListener函数注册传感器,使用完后需要通过unregisterListener取消注册。

百闻不如一见,还是直接讲代码:新建一个Sensors的工程,创建一个Sensors.java,内容如下:***-********-**********01 package me.sigma.sensors;020304import android.app.Activity;05import android.hardware.SensorListener;06import android.hardware.SensorManager;07import android.os.Bundle;08import android.widget.TextView;0910public class Sensors extends Activity {详细说明各传感器调用方式,并附加详细的代码11 TextView myTextView1;//t12 //gen13 TextView myTextView2;//x14 TextView myTextView3;//y15 TextView myTextView4;//z16 //acc17 TextView myTextView5;//x18 TextView myTextView6;//y19 TextView myTextView7;//z20 //ori21 TextView myTextView8;//x22 TextView myTextView9;//y23 TextView myTextView10;//z24 //Light25 TextView myTextView11;//z2627 SensorManager mySensorManager;//28 @Override29 public void onCreate(Bundle savedInstanceState) {30 super.onCreate(savedInstanceState);31 setContentView(yout.main);32 myTextView1 = (TextView) findViewById(R.id.myTextView1);33 myTextView2 = (TextView) findViewById(R.id.myTextView2);34 myTextView3 = (TextView) findViewById(R.id.myTextView3);35 myTextView4 = (TextView) findViewById(R.id.myTextView4);36 myTextView5 = (TextView) findViewById(R.id.myTextView5);37 myTextView6 = (TextView) findViewById(R.id.myTextView6);38 myTextView7 = (TextView) findViewById(R.id.myTextView7);39 myTextView8 = (TextView) findViewById(R.id.myTextView8);40 myTextView9 = (TextView) findViewById(R.id.myTextView9);41 myTextView10 = (TextView) findViewById(R.id.myTextView10);42 myTextView11 = (TextView) findViewById(R.id.myTextView11);43 mySensorManager = (SensorManager)getSystemService(SENSOR_*****); 44 }45 private SensorListener mySensorListener = new SensorListener(){46 @Override47 public void onAccuracyChanged(int sensor, int accuracy) {}详细说明各传感器调用方式,并附加详细的代码48 @Override49 public void onSensorChanged(int sensor, float[] values) { 50if(sensor == SensorManager.SENSOR_*****TURE){51 myTextView1.setText(“Current Temprature:"+values); 52 }elseif(sensor == SensorManager.SENSOR_*****C_FIELD){53 myTextView2.setText("Current Magnetic x:"+values); 54 myTextView3.setText("Current Magnetic y:"+values); 55myTextView4.setText("Current Magnetic z:"+values); 56 }else if(sensor == SensorManager.SENSOR_*****OMETER){57 myTextView5.setText("Current Accelero x:"+values); 58 myTextView6.setText("Current Accelero y:"+values); 59myTextView7.setText("Current Accelero z:"+values); 60 }else if(sensor == SensorManager.SENSOR_*****TION){61 myTextView8.setText("Current Oraenttation x:"+values); 62 myTextView9.setText("Current Oraenttation y:"+values); 63 myTextView10.setText("Current Oraenttation z:"+values); 64 }elseif(sensor == SensorManager.SENSOR_LIGHT){65 myTextView11.setText("Current Oraenttation x:"+values); 66 }67 }68 };69 @Override70 protected void onResume() {71 mySensorManager.registerListener(72 mySensorListener,73 SensorManager.SENSOR_*****TURE |74 SensorManager.SENSOR_*****C_FIELD |75 SensorManager.SENSOR_*****OMETER |76 SensorManager.SENSOR_LIGHT |77 SensorManager.SENSOR_*****TION,78 SensorManager.SENSOR_DELAY_UI79 );80 super.onResume();81 }82 @Override83 protected void onPause() {84 mySensorManager.unregisterListener(mySensorListener);详细说明各传感器调用方式,并附加详细的代码85 super.onPause();86 }87}更改res/layout/下面的main.xml,为如下内容:***-********-**********01 ?xml version="1.0" encoding="utf-8"?02LinearLayout xmlns:android="/apk/res/android" 03 android:orientation="vertical"04 android:layout_width="fill_parent"05 android:layout_height="fill_parent"06 TextView07 android:id="@+id/title"08 android:gravity="center_horizontal"09 android:textSize="20px"10 android:layout_width="fill_parent"11 android:layout_height="wrap_content"12 android:text="@string/title"/13 TextView14 android:id="@+id/myTextView1"15 android:textSize="18px"16 android:layout_width="fill_parent"17 android:layout_height="wrap_content"18 android:text="@string/myTextView1"/19 TextView20 android:id="@+id/myTextView2"21 android:textSize="18px"22 android:layout_width="fill_parent"23 android:layout_height="wrap_content"24 android:text="@string/myTextView2"/25 TextView26 android:id="@+id/myTextView3"27 android:textSize="18px"28 android:layout_width="fill_parent"29 android:layout_height="wrap_content"30 android:text="@string/myTextView3"/详细说明各传感器调用方式,并附加详细的代码31 TextView32 android:id="@+id/myTextView4"33 android:textSize="18px"34 android:layout_width="fill_parent"35 android:layout_height="wrap_content"36 android:text="@string/myTextView4"/37 TextView38 android:id="@+id/myTextView5"39 android:textSize="18px"40 android:layout_width="fill_parent"41 android:layout_height="wrap_content"42 android:text="@string/myTextView5"/43 TextView44 android:id="@+id/myTextView6"45 android:textSize="18px"46 android:layout_width="fill_parent"47 android:layout_height="wrap_content"48 android:text="@string/myTextView6"/49 TextView50 android:id="@+id/myTextView7"51 android:textSize="18px"52 android:layout_width="fill_parent"53 android:layout_height="wrap_content"54 android:text="@string/myTextView7"/55 TextView56 android:id="@+id/myTextView8"57 android:textSize="18px"58 android:layout_width="fill_parent"59 android:layout_height="wrap_content"60 android:text="@string/myTextView8"/61 TextView62 android:id="@+id/myTextView9"63 android:textSize="18px"64 android:layout_width="fill_parent"65 android:layout_height="wrap_content"66 android:text="@string/myTextView9"/67 TextView详细说明各传感器调用方式,并附加详细的代码68 android:id="@+id/myTextView10"69 android:textSize="18px"70 android:layout_width="fill_parent"71 android:layout_height="wrap_content"72 android:text="@string/myTextView10"/73 TextView74 android:id="@+id/myTextView11"75 android:textSize="18px"76 android:layout_width="fill_parent"77 android:layout_height="wrap_content"78 android:text="@string/myTextView11"/79/LinearLayout80更改res/values/strings.xml为如下内容:***-********-**********01 ?xml version="1.0" encoding="utf-8"?02resources03 string name="hello"templator!/string04 string name="app_name"templator/string05 string name="title"Sigma Sensors/string06 string name="myTextView1"Current Temprature:/string07 string name="myTextView2"Current Magnetic x:/string08 string name="myTextView3"Current Magnetic y:/string09 string name="myTextView4"Current Magnetic z:/string10 string name="myTextView5"Current Accelero x:/string11 string name="myTextView6"Current Accelero y:/string12 string name="myTextView7"Current Accelero z:/string13 string name="myTextView8"Current Oraenttation x:/string14 string name="myTextView9"Current Oraenttation y:/string15 string name="myTextView10"Current Oraenttation z:/string16 string name="myTextView11"Current Light:/string。

android系统 传感器获取

android系统 传感器获取

android系统传感器获取1显示系统获取的传感器的布局文件activity_main.xml<RelativeLayout xmlns:android="/apk/res/andr oid"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"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.shunchang.yingyong.test.cgq.MainActivity"><TextViewandroid:id="@+id/tips_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/><ScrollViewandroid:id="@+id/scrollView1"android:layout_below="@+id/tips_tv"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/all_ll"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"></LinearLayout></ScrollView></RelativeLayout>2获取系统的传感器:setContentView(yout.activity_main);all_ll=(LinearLayout)findViewById(R.id.all_ll);tips_tv=(TextView)findViewById(R.id.tips_tv);SensorManager sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);List<Sensor>sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);tips_tv.setText("传感器的个数:"+ sensors.size());for (Sensor s :sensors) {Button bt=new Button(this);bt.setText(getSensorName(s.getType()));bt.setId(s.getType());bt.setOnClickListener(this);all_ll.addView(bt);}3根据传感器类型获取传感器的名称private String getSensorName(int type){String name="";switch (type) {case Sensor.TYPE_ACCELEROMETER:name="重力加速度感测器";break;case Sensor.TYPE_MAGNETIC_FIELD:name="磁场传感器";break;case Sensor.TYPE_ORIENTATION:name="方位传感器";break;case Sensor.TYPE_GYROSCOPE:name="陀螺仪传感器";break;case Sensor.TYPE_LIGHT:name="环境光线传感器";break;case Sensor.TYPE_PRESSURE:name="压力传感器";break;case Sensor.TYPE_TEMPERATURE:name="温度传感器";break;case Sensor.TYPE_PROXIMITY:name="距离传感器";break;case Sensor.TYPE_GRAVITY:name="重力传感器";break;case Sensor.TYPE_LINEAR_ACCELERATION:name="加速度传感器";break;case Sensor.TYPE_ROTATION_VECTOR:name="矢量传感器";break;case Sensor.TYPE_RELATIVE_HUMIDITY:name="湿度传感器";break;case Sensor.TYPE_AMBIENT_TEMPERATURE:name="温度传感器";break;case Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED: name="磁场传感器";break;case Sensor.TYPE_GAME_ROTATION_VECTOR:name="旋转矢量传感器";break;case Sensor.TYPE_GYROSCOPE_UNCALIBRATED:name="陀螺传感器";break;case Sensor.TYPE_SIGNIFICANT_MOTION:name="运动触发传感器";break;case Sensor.TYPE_STEP_DETECTOR:name="步探测器传感器";break;case Sensor.TYPE_STEP_COUNTER:name="一步计数器传感器";break;case Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR: name="地球磁旋转矢量";break;case Sensor.TYPE_HEART_RATE:name="心率监测";break;// case Sensor.TYPE_TILT_DETECTOR:// name="唤醒传感器";// break;// case Sensor.TYPE_WAKE_GESTURE:// name="唤醒传感器";// break;// case Sensor.TYPE_GLANCE_GESTURE:// name="唤醒传感器";// break;// case Sensor.TYPE_PICK_UP_GESTURE:// name="唤醒传感器";// break;case 26:name="腕倾斜姿态传感器";break;default:break;}return name;}‘4获取光线传感器的例子:publicclass LightActivity extends Activity implements OnClickListener {public Button button1_add;Sensor lightSensor = null;//光线传感器引用SensorManager sensorManager;private TextView tips_tv,name_tv;@Overrideprotectedvoid onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.activity_light);button1_add=(Button)findViewById(R.id.button1_add);tips_tv=(TextView)findViewById(R.id.tips_tv);name_tv=(TextView)findViewById(_tv);name_tv.setText("光线传感器");sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERV ICE);lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);sensorManager.registerListener(new SensorEventListener() {@Overridepublicvoid onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubtips_tv.setText(event.toString());if(event.sensor.getType() == Sensor.TYPE_LIGHT){//将values的值显示到屏幕上float[] values = event.values;Log.v("","value[0]:"+values[0]);tips_tv.setText(tips_tv.getText()+""+"value[0]:"+values[0]);tips_tv.setText(tips_tv.getText()+""+"value[1]:"+values[1]);tips_tv.setText(tips_tv.getText()+""+"value[2]:"+values[2]);}}@Overridepublicvoid onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stubif(sensor.getType() == Sensor.TYPE_LIGHT){//设置将accuracy的值显示到屏幕上// accuracy_view.setText("accuracy:"+accuracy);tips_tv.setText("accuracy:"+accuracy+""+sensor.getMaxDelay()+" "+sensor.getMinDelay()+""+sensor.getResolution());}}},lightSensor,SensorManager.SENSOR_DELAY_NORMAL);}@Overridepublicvoid onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1_add:break;default:break;}}}对应的布局文件activity_light<RelativeLayout xmlns:android="/apk/res/andr oid"xmlns:tools="/tools" android:layout_width="match_parent"android:layout_height="match_parent"><ScrollViewandroid:id="@+id/scrollView1"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/all_ll"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/name_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/><TextViewandroid:id="@+id/tips_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/><Buttonandroid:id="@+id/button1_add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="22dp"android:layout_marginTop="61dp"android:text="Button"/></LinearLayout></ScrollView></RelativeLayout>。

Android操作系统11种传感器介绍

Android操作系统11种传感器介绍

在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。

#define SENSOR_TYPE_ACCELEROMETER 1 //加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力#define SENSOR_TYPE_ORIENTATION 3 //方向#define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪#define SENSOR_TYPE_LIGHT 5 //光线感应#define SENSOR_TYPE_PRESSURE 6 //压力#define SENSOR_TYPE_TEMPERATURE 7 //温度#define SENSOR_TYPE_PROXIMITY 8 //接近#define SENSOR_TYPE_GRAVITY 9 //重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量我们依次看看这十一种传感器1 陀螺仪传感器陀螺仪传感器叫做Gyro-sensor,返回x、y、z三轴的角加速度数据。

角加速度的单位是radians/second。

根据Nexus S手机实测:水平逆时针旋转,Z轴为正。

水平逆时针旋转,z轴为负。

向左旋转,y轴为负。

向右旋转,y轴为正。

向上旋转,x轴为负。

向下旋转,x轴为正。

ST的L3G系列的陀螺仪传感器比较流行,iphone4和google的nexus s中使用该种传感器。

2 方向传感器方向传感器简称为O-sensor,返回三轴的角度数据,方向数据的单位是角度。

为了得到精确的角度数据,E-compass需要获取G-sensor的数据,经过计算生产O-sensor数据,否则只能获取水平方向的角度。

方向传感器提供三个数据,分别为azimuth、pitch和roll。

android重力感应详解.

android重力感应详解.

星期天在家没有事情,一边翻译sdk中onSensorChanged 的解释,一遍摸索G1下onSensorChanged 第二个参数values的含义:总结如下,发完赶紧吃饭!1 public abstract void onAccuracyChanged (int sensor, int accuracy复制代码Called when the accuracy of a sensor has changed. See SensorManager for details. Parameters:sensor The ID of the sensor being monitoredaccuracy The new accuracy of this sensor.当sensor的"精确度"发生改变的时候,该方法会被回调,详细信息请参看SensorManager 类参数:sensor 被监视的sensor的IDaccuracy 关于此sensor的新精确度描述2 public abstract void onSensorChanged (int sensor, float[] values复制代码Called when sensor values have changed. The length and contents of the values array vary depending onwhich sensor is being monitored. See SensorManager for details on possible sensor types.当sensor的值发生改变的时候被回调,values数组的元素个数和其中的内容取决于哪个sensor正在被监视,sensor的可用类型请参看SensorManager类Definition of the coordinate system used below.The X axis refers to the screen's horizontal axis (the small edge in portrait mode, the long edge inlandscape mode and points to the right.The Y axis refers to the screen's vertical axis and points towards the top of the screen (the origin isin the lower-left corner.The Z axis points toward the sky when the device is lying on its back on a table.X轴:和屏幕平行并且指向右边的轴(在portrait中使用"小边角",在landscape模式中使用"长边角")Y轴:和屏幕垂直并且指向屏幕上方的轴(坐标原点在左下角)Z轴:当设备(手机背面着地放在桌子上的时候,指向天空的方向就是Z轴IMPORTANT NOTE: The axis are swapped when the device's screen orientation changes. To access theunswapped values, use indices 3, 4 and 5 in values[].一定要大家注意的:坐标系是跟随手机屏幕的方向改变而改变的,values数组中下标为3、4、5的3个元素,使用的是恒定的坐标系,(和尚注:你可以通过这三个元素得到一个不变的坐标,游戏开发中可能会用到(和尚注:此方法的第一个参数sensor可能是SensorManager.SENSOR_ORIENTATIONSensorManager.SENSOR_ORIENTATION中的一个解释如下:SENSOR_ORIENTATION, SENSOR_ORIENTATION_RAW:All values are angles in degrees.values[0]: Azimuth, rotation around the Z axis (0<=azimuth<360. 0 = North, 90 = East, 180 = South, 270 =Westvalues[1]: Pitch, rotation around X axis (-180<=pitch<=180, with positive values when the z-axis movestoward the y-axis.values[2]: Roll, rotation around Y axis (-90<=roll<=90, with positive values when the z-axis movestoward the x-axis.所有的值都是以角度为单位的values[0]:经度,以Z轴为中心旋转(0-360之间,北方=0,东方=90,南方=180,西方=270(和尚注:这个方向指的是google标志所对的方向,为了测试这个值,手都酸了(*^__^*values[1]: 着地点(终于选了一个合适的词,以X为轴转动(-180到180,Z轴向Y 轴方向运动的相对偏移量(和尚注:当手机垂直放在面前的时候为-90,当你面对着手机屏幕看天花板的时候为180/-180,当手机屏幕朝上放在水平的桌子上的时候为0,当手机的USB口朝向天花板垂直放置的时候为90values[2]: 转动,以Y为中心转动(-90到90,Z轴向X轴方向运动的相对偏移量(和尚注:这个运动其实就是我们所说的"垂直屏幕和水平屏幕的切换"Note that this definition of yaw, pitch and roll is different from the traditional definition used inaviation where the X axis is along the long side of the plane (tail to nose.需要注意的是在传统意义上的航空定位中,X轴指的是飞机的机身,而这里的yaw、pitch、roll和它是不一样的,这里的X轴指的是飞机的水平翼(和尚注:SDK中的这个解释对于西方人可能有帮助,对于我们可能会更加迷茫,我相信我上边已经说的够清楚了。

智能手机上的常用传感器

智能手机上的常用传感器

Android操作系统11种传感器介绍在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。

#define SENSOR_TYPE_ACCELEROMETER 1 //加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力#define SENSOR_TYPE_ORIENTATION 3 //方向#define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪#define SENSOR_TYPE_LIGHT 5 //光线感应#define SENSOR_TYPE_PRESSURE 6 //压力#define SENSOR_TYPE_TEMPERATURE 7 //温度#define SENSOR_TYPE_PROXIMITY 8 //接近#define SENSOR_TYPE_GRAVITY 9 //重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量我们依次看看这十一种传感器1 加速度传感器加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。

该数值包含地心引力的影响,单位是m/s^2。

将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。

将手机朝下放在桌面上,z轴为-9.81。

将手机向左倾斜,x轴为正值。

将手机向右倾斜,x轴为负值。

将手机向上倾斜,y轴为负值。

将手机向下倾斜,y轴为正值。

加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。

手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。

这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU 相连,数据精度小于16bit。

Android传感器---Motion Sensor

Android传感器---Motion Sensor

本文译自:/guide/topics/sensors/sensors_motion.htmlAndroid平台提供了几个能够监视设备移动的传感器。

其中的两个是基于硬件的(加速度传感器和陀螺仪),有三个传感器既可以是基于硬件的,也可以是基于软件的(重力传感器、线性加速度传感器和旋转矢量传感器)。

例如,在某些基于软件传感器的设备上会从加速度传感器和磁力仪中提取它们的数据,但是在其他的设备上,它们也可以使用陀螺仪来提取数据。

大多数Android设备都有加速度传感器和陀螺仪。

基于软件的传感器的有效性是可变的,因为它们要依赖一个或多个硬件传感器来提取对应的数据。

运动传感器用于监视设备的移动,如:倾斜、振动、旋转或摆动。

移动通常是直接的用户输入的反映(如,用户在游戏中操作汽车或控制一个球),但也能够是设备所处的物理环境的反映(如,驾驶汽车时的位置移动)。

在第一种场景中,你要相对于设备的参照系或应用程序的参照系来监视设备的移动,在第二种场景中,你要相对于全球参照系来监视设备的移动。

通常,移动传感器本身并不用于监视设备的位置,但它们能够跟其他传感器一起来使用,例如跟地磁传感器一起来判断设备相对于全球参照系统的的位置(更多信息,请看位置传感器)。

所有的移动传感器的每个SensorEvent都会返回传感器值的多维数组。

例如,一个加速度传感器的传感器事件会返回三个坐标轴方向的加速度力,陀螺仪会返回三个坐标轴方向旋转速率。

这些数据是以float数组的形式跟SensorEvent参数一起被返回的。

表1概要介绍了Android平台上可用的移动传感器。

1标量部分是一个可选值。

对于移动检测和监视,旋转矢量传感器和重力传感器是使用频率最高的传感器。

旋转矢量传感器尤其灵活,可广泛的应用于移动相关的任务,如,检测手势、监视角度变化、监视相对的方向变化等。

例如:如果你正在开发一款使用2维或3维罗盘来增强现实感游戏,或增强相机的稳定性的应用程序,那么旋转矢量传感器是非常理想的选择。

android重力感应模拟器

android重力感应模拟器

在模拟器上模拟重力感应众所周知,Android系统支持重力感应,通过这种技术,可以利用手机的移动、翻转来实现更为有趣的程序。

但遗憾的是,在Android模拟器上是无法进行重力感应测试的。

既然Android系统支持重力感应,但又在模拟器上无法测试,该怎么办呢?别着急,天无绝人之路,有一些第三方的工具可以帮助我们完成这个工作,本节将介绍一种在模拟器上模拟重力感应的工具(sensorsimulator)。

这个工具分为服务端和客户端两部分。

服务端是一个在PC上运行的Java Swing GUI程序,客户端是一个手机程序(apk文件),在运行时需要通过客户端程序连接到服务端程序上才可以在模拟器上模拟重力感应。

读者可以从下面的地址下载这个工具:1./p/openintents/downloads/list进入下载页面后,下载如图8.8所示的黑框中的zip文件。

将zip文件解压后,运行bin目录中的sensorsimulator.jar文件,会显示如图8.9所示的界面。

界面的左上角是一个模拟手机位置的三维图形,右上角可以通过滑杆来模拟手机的翻转、移动等操作。

下面来安装客户端程序,先启动Android模拟器,然后使用下面的命令安装bin目录中的SensorSimulatorSettings.apk文件。

1.adb install SensorSimulatorSettings.apk如果安装成功,会在模拟器中看到如图8.10所示黑框中的图标。

运行这个程序,会进入如图8.11所示的界面。

在IP地址中输入如图8.9所示黑框中的IP(注意,每次启动服务端程序时这个IP可能不一样,应以每次启动服务端程序时的IP为准)。

最后进入【Testing】页,单击【Connect】按钮,如果连接成功,会显示如图8.12所示的效果。

下面来测试一下SensorSimulator自带的一个demo,在这个demo中输出了通过模拟重力感应获得的数据。

Android传感器的应用开发

Android传感器的应用开发

Android传感器的应用开发整理:苏老师一、传感器的获取1、Android所有的传感器都归传感器管理器SensorManager 管理,获取传感器管理器的方法:String name = Context.SENSOR_SERVICE;SensorManager sensorManager = (SensorManager)getSystemService(name);2、现行Android版本支持的传感器有:3、通过传感器管理器获取传感器对象的方法:(1)、获取一个传感器Sensor defaultGyroscope =sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);(2)、获取多个传感器,获取结果是传感器集合List<Sensor> pressureSensors =sensorManager.getSensorList(Sensor.TYPE_PRESSURE); //限定某种传感器类型或者不限传感器类型获取传感器对象列表:List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);4、传感器对象提供获取其传感器信息的方法:二、传感器事件的常规应用步骤1、获取传感器管理器对象、传感器对象// 获取传感器管理器SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);// 获取加速传感器Sensor acceleromererSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);2、定义传感器事件// 定义传感器事件监听器SensorEventListener acceleromererListener = new SensorEventListener() {@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}//传感器数据变动事件@Overridepublic void onSensorChanged(SensorEvent event) {float x = event.values[SensorManager.DATA_X];float y = event.values[SensorManager.DATA_Y];float z = event.values[SensorManager.DATA_Z];//x、y、z变量是从加速传感器获得的数据//……//……}};3、注册(应用)传感器事件//在传感器管理器中注册监听器sm.registerListener(acceleromererListener,acceleromererSensor, SensorManager.SENSOR_DELAY_NORMAL);三、传感器事件参数变量onSensorChanged方法只有一个SensorEvent类型的参数event,其中SensorEvent类有一个values变量非常重要,该变量的类型是float[]。

android传感器(OnSensorChanged)使用介绍

android传感器(OnSensorChanged)使用介绍

android传感器(OnSensorChanged)使⽤介绍下⾯是API中定义的⼏个代表sensor的常量。

Int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. 加速度传感器int TYPE_ALL A constant describing all sensor types. 所有类型 A constant describing all sensor types.int TYPE_GRAVITY A constant describing a gravity sensor type.int TYPE_GYROSCOPE A constant describing a gyroscope sensor type 回转仪传感器int TYPE_LIGHT A constant describing an light sensor type.光线传感器int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type.int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.磁场传感器int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation()instead. 磁场传感器int TYPE_PRESSURE A constant describing a pressure sensor type 压⼒计传感器int TYPE_PROXIMITY A constant describing an proximity sensor type.距离传感器int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type.int TYPE_TEMPERATURE A constant describing a temperature sensor type 温度传感器我们在编写传感器相关的代码时可以按照以下步骤:第⼀步:获得传感器管理器SensorManger sm = (SensorManager).getSystemService(SENSOR_SERVICE);第⼆步:为具体的传感器注册监听器 ,这⾥我们使⽤磁阻传感器Sensor.TYPE_ORIENTATION.sm,registerListener (this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);这⾥如果想注册其他的传感器,可以改变第⼀个参数值的传感器类型属性。

Android重力感应实现方式优选PPT文档

Android重力感应实现方式优选PPT文档
Splitter的匹配过程 此函数通过调getMediaPlayerService()先得到当前的MediaPlayerService, const sp<IMediaPlayerService>&
node factory类。 service(getMediaPlayerService());
新建一个IMediaPlayer变量 新建一个IMediaPlayer变量
播放引擎PVPlayerEngine类中有 * baselibs:包含数据结构和线程安全等内容的底层库
Splitter的定义与初始化
以wav的splitter为例,在fileformats目录下有解 析wav文件格式的pvwavfileparser.cpp文件,在 nodes目录下有pvmf_wavffparser_factory.cpp, pvmf_wavffparser_node.h, pvmf_wavffparser_port.h等文件。
status_t MediaPlayer::setDataSource(const char *url) Android多媒体框架的根目录 Splitter的定义与初始化 新建一个IMediaPlayer变量
PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids)函数的功能是根据输入类型和输出类型,在已注册的node vector中寻找是否有匹配的node,有的话传回其 唯一识别标识PVUuid。 * baselibs:包含数据结构和线程安全等内容的底层库 * codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现 Android多媒体框架的根目录 Splitter的匹配过程

Android开发中的重力传感器用法实例详解

Android开发中的重力传感器用法实例详解
这篇文章主要介绍了android开发中的重力传感器用法简单分析了android重力传感器的基本功能使用方法并结合实例形式分析了android基于重力传感器实现横竖屏切换的相关操作技巧需要的朋友可以参考下
Android开 发 中 的 重 力 传 感 器 用 法 实 例 详 解
本文实例讲述了Android开发中的重力传感器用法。分享给大家供大家参考,具体如下:
if (isPortrait) { Log.e(test, 切换成横屏); mActivity.setRequestedOrientation(0); isPortrait = false; } } else if ((orientation > 315 && orientation < 360) || (orientation > 0 && orientation < 45)) { if (!isPortrait) { Log.e(test,切换成竖屏); mActivity.setRequestedOrientation(1); isPortrait = true; } } break; default: break; }
最后我们在onPause()中注销所有传感器的监听,释放重力感应器资源!
protected void onPause() { //注销所有传感器的监听 sensorManager.unregisterListener(mySensorEventListener); super.onPause(); }
到此,有关重力传感器的介绍完毕!
接下来看一个Android用重力传感器做横竖屏切换的例子
在播放视频的时候,可能要做横竖屏的切换,但是,用户可以设置自己的手机关掉屏幕旋转,这个时候就需要想其他的办法了,比如:重力传感器。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

所建立Android项目包的名称可自定义修改
//=============syx==============//
package com.example.yidong;
//==============================//
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
public class MainActivity extends Activity implements SensorEventListener {
SensorManager sensorManager;
EditText editText;
EditText editText1;
EditText editText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.activity_main);
editText=(EditText)findViewById(R.id.editText1);
editText1=(EditText)findViewById(R.id.editText2);
editText2=(EditText)findViewById(R.id.editText3);
//获取重力传感器服务
sensorManager=(SensorManager)getSystemService(MainActivity.this.SENSOR_SERVICE);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//注册加速度传感器监听器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
sensorManager.unregisterListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub
}
//当参数值改变时调用此函数
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values=event.values;
StringBuilder sb=new StringBuilder();
StringBuilder sb1=new StringBuilder();
StringBuilder sb2=new StringBuilder();
sb.append("X的加速度=");
sb.append(values[0]+"\n");
sb1.append("Y的加速度=");
sb1.append(values[1]+"\n");
sb2.append("z的加速度=");
sb2.append(values[2]+"\n");
editText.setText(sb.toString());
editText1.setText(sb1.toString());
editText2.setText(sb2.toString());
}
}。

相关文档
最新文档