压力感应 开启android
2015-09-12 09:53:58 wanzhicheng3656 阅读数 727

最近在看传感器这方面的东西,发现Android封装了好多传感器,终于知道自动屏幕感应亮度是怎么做的了;
来分享一下,其实代码也非常简单:

public class MainActivity extends Activity {

    private SensorManager sensorManager;

    private TextView light;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        light = (TextView) findViewById(R.id.light_level);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener);
        }
    }

    private SensorEventListener listener = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            // values数组中第一个下标的值就是当前的光照强度
            float value = event.values[0];
            light.setText("当前亮度为" + value + " lx");
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }

    };

}

这就是全部代码!初始化SensorManager,Sensor,还有注册监听器,values数组中第一个下标的值就是当前的光照强度

2017-03-07 16:04:11 u013749540 阅读数 636

1、Android中支持的Snesor种类

Sensor

说明

Sensor.TYPE_ACCELEROMETER

加速度感应检测

Sensor.TYPE_MAGNETIC_FIELD

磁场感应检测

Sensor.TYPE_ORIENTATION

方位感应检测

Sensor.TYPE_GYROSCOPE

回转仪感应检测

Sensor.TYPE_LIGHT

亮度感应检测

Sensor.TYPE_PRESSURE

压力感应检测

Sensor.TYPE_TEMPERATURE

温度感应检测

Sensor.TYPE_PROXIMITY

接近感应检测

2、Android感应检测管理----SensorManager

感应检测功能:

1、取得SensorManager

   使用感应检测Sensor首要先获取感应设备的检测信号,你可以调用Context.getSysteService(SENSER_SERVICE)方法来取得感应检测的服务

2、实现取得感应检测Sensor状态的监听功能

   实现以下两个SensorEventListener方法来监听,并取得感应检测Sensor状态:

[java] view plain copy
  1. //在感应检测到Sensor的精密度有变化时被调用到。  
  2. public void onAccuracyChanged(Senso sensor,int accuracy);  
  3. //在感应检测到Sensor的值有变化时会被调用到。  
  4. public void onSensorChanged(SensorEvent event);  
3、实现取得感应检测Sensor目标各类的值

   实现下列getSensorList()方法来取得感应检测Sensor的值;

[java] view plain copy
  1. List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_TEMPERATURE);  
4、注册SensorListener

[java] view plain copy
  1. sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);  

第一个参数:监听Sensor事件,第二个参数是Sensor目标种类的值,第三个参数是延迟时间的精度密度。延迟时间的精密度参数如下:

参数

延迟时间

SensorManager.SENSOR_DELAY_FASTEST

0ms

SensorManager.SENSOR_DELAY_GAME

20ms

SensorManager.SENSOR_DELAY_UI

60ms

SensorManager.SENSOR_DELAY_NORMAL

200ms


因为感应检测Sensor的服务是否频繁和快慢都与电池参量的消耗有关,同时也会影响处理的效率,所以兼顾到消耗电池和处理效率的平衡,设置感应检测Sensor的延迟时间是一门重要的学问,需要根据应用系统的需求来做适当的设置。

感应检测Sensor的硬件检测组件收不同的厂商提供。你可以采用Sensor的getVendor(),Sensor()的getName()和Sensor的getVeesrion()方法来取得 厂商的名称、产品和产品版本。

5、取消注册

[java] view plain copy
  1. sm.unregisterListener(SensorEventListener listener)  

加速度感应检测——Accelerometer

Accelerometer Sensor测量的是所有施加在设备上的力所产生的加速度的负值(包括重力加速度)。加速度所使用的单位是m/sec^2,数值是加速度的负值。

SensorEvent.values[0]:加速度在X轴的负值

SensorEvent.values[1]:加速度在Y轴的负值

SensorEvent.values[2]:加速度在Z轴的负值

例如:

当手机Z轴朝上平放在桌面上,并且从左到右推动手机,此时X轴上的加速度是正数。

当手机Z轴朝上静止放在桌面上,此时Z轴的加速度是+9.81m/sec^2

当手机从空中自由落体,此时加速度是0

当手机向上以Am/sec^2的加速度向空中抛出,此时加速度是A+9.81m/sec^2

重力加速度感应检测——Gravity

重力加速度,其单位是m/sec^2,其坐标系与Accelerometer使用的一致。当手机静止时,gravity的值和Accelerometer的值是一致的。

线性加速度感应检测——Linear-Acceleration

AccelerometerGravityLinear-Acceleration三者的关系如下公式:

accelerometer = gravity + linear-acceleration

地磁场感应检测——Magnetic-field

地磁场的单位是micro-Tesla(uT),检测的是X、Y、Z轴上的绝对地磁场。

陀螺仪感应检测——Gyroscope

陀螺仪的单位是弧度/秒,测量的是物体分别围绕X,Y,Z轴旋转的角速度。它的坐标系与加速度传感器的坐标系相同。逆时针方向旋转的角度正的。也就是说,如果设备逆时针旋转,观察者向X,Y,Z轴的正方向看去,就报告设备是正转的。请注意,这是标准的正旋转的数学定义。

光线感应检测——Light

values[0]:表示环境光照的水平,单位是SI lux。

位置逼近感应检测——Proximity

values[0]:逼近的距离,单位是厘米(cm)。有一些传感器只能支持近和远两种状态,这种情况下,传感器必须报告它在远状态下的maximum_range值和在近状态下的小值。

旋转矢量感应检测——Rotation Vector

旋转向量是用来表示设备的方向,它是由角度和轴组成,就是设备围绕x,y,z轴之一旋转θ角度。旋转向量的三个要素是,这样旋转向量的大小等于sin(θ/2),旋转向量的方向等于旋转轴的方向。

values[0]: x*sin(θ/2) 
values[1]: y*sin(θ/2) 
values[2]: z*sin(θ/2) 
values[3]: cos(θ/2) (optional: only if value.length = 4)

方向感应检测——Orientation

其单位是角度

values[0]: Azimuth(方位),地磁北方向与y轴的角度,围绕z轴旋转(0到359)。0=North, 90=East, 180=South, 270=West 
values[1]: Pitch(俯仰),围绕X轴旋转(-180 to 180), 当Z轴向Y轴运动时是正值
values[2]: Roll(滚),围绕Y轴旋转(-90 to 90),当X轴向Z轴运动时是正值 

注意:这里的定义与航空中定义的yaw、pitch和roll不同,航空中的X轴是沿着飞机的最长边(从头到尾)。

注意:这个传感器类型存在遗留问题,请使用与getRotationMatrix()和remapCoordinateSystem()以及getOrientation()配合使用,来计算值代替得到的值。

重要说明:由于历史的原因,以顺时针旋转的滚动角是正的(从数学上讲,它应该是逆时针方向)。

2012-11-06 15:33:09 dylancao 阅读数 572

本文介绍Android感应检测Sensor包的操作和使用。Sensor的功能必须在实际的Android手机上测试。

表格 1Android中支持的Snesor种类

Sensor

说明

Sensor.TYPE_ACCELEROMETER

加速度感应检测

Sensor.TYPE_MAGNETIC_FIELD

磁场感应检测

Sensor.TYPE_ORIENTATION

方位感应检测

Sensor.TYPE_GYROSCOPE

回转仪感应检测

Sensor.TYPE_LIGHT

亮度感应检测

Sensor.TYPE_PRESSURE

压力感应检测

Sensor.TYPE_TEMPERATURE

温度感应检测

Sensor.TYPE_PROXIMITY

接近感应检测

Sensor编程的一般步骤

1.取得SensorManager

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

2.实现接口SensorEventListener

public void onAccuracyChanged(Sensor sensor, int accuracy) {}

public void onSensorChanged(SnesorEvent event) {}

3.取得某种Sensor对象

List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_TEMPERATURE);

4.注册SensorListener

sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);

其中第三个参数是延迟时间的精密度。

表格 2感应检测Sensor的延迟时间

参数

延迟时间

SensorManager.SENSOR_DELAY_FASTEST

0ms

SensorManager.SENSOR_DELAY_GAME

20ms

SensorManager.SENSOR_DELAY_UI

60ms

SensorManager.SENSOR_DELAY_NORMAL

200ms

5.取消注册SensorManager

sm.unregisterListener(SensorEventListener listener);

加速度感应检测——Accelerometer

Accelerometer Sensor测量的是所有施加在设备上的力所产生的加速度的负值(包括重力加速度)。加速度所使用的单位是m/sec^2,数值是加速度的负值。

SensorEvent.values[0]:加速度在X轴的负值

SensorEvent.values[1]:加速度在Y轴的负值

SensorEvent.values[2]:加速度在Z轴的负值

例如:

当手机Z轴朝上平放在桌面上,并且从左到右推动手机,此时X轴上的加速度是正数。

当手机Z轴朝上静止放在桌面上,此时Z轴的加速度是+9.81m/sec^2

当手机从空中自由落体,此时加速度是0

当手机向上以Am/sec^2的加速度向空中抛出,此时加速度是A+9.81m/sec^2

重力加速度感应检测——Gravity

重力加速度,其单位是m/sec^2,其坐标系与Accelerometer使用的一致。当手机静止时,gravity的值和Accelerometer的值是一致的。

线性加速度感应检测——Linear-Acceleration

AccelerometerGravityLinear-Acceleration三者的关系如下公式:

accelerometer = gravity + linear-acceleration

地磁场感应检测——Magnetic-field

地磁场的单位是micro-Tesla(uT),检测的是X、Y、Z轴上的绝对地磁场。

陀螺仪感应检测——Gyroscope

陀螺仪的单位是弧度/秒,测量的是物体分别围绕X,Y,Z轴旋转的角速度。它的坐标系与加速度传感器的坐标系相同。逆时针方向旋转的角度正的。也就是说,如果设备逆时针旋转,观察者向X,Y,Z轴的正方向看去,就报告设备是正转的。请注意,这是标准的正旋转的数学定义。

光线感应检测——Light

values[0]:表示环境光照的水平,单位是SI lux。

位置逼近感应检测——Proximity

values[0]:逼近的距离,单位是厘米(cm)。有一些传感器只能支持近和远两种状态,这种情况下,传感器必须报告它在远状态下的maximum_range值和在近状态下的小值。

旋转矢量感应检测——Rotation Vector

旋转向量是用来表示设备的方向,它是由角度和轴组成,就是设备围绕x,y,z轴之一旋转θ角度。旋转向量的三个要素是,这样旋转向量的大小等于sin(θ/2),旋转向量的方向等于旋转轴的方向。

values[0]: x*sin(θ/2) 
values[1]: y*sin(θ/2) 
values[2]: z*sin(θ/2) 
values[3]: cos(θ/2) (optional: only if value.length = 4)

方向感应检测——Orientation

其单位是角度

values[0]: Azimuth(方位),地磁北方向与y轴的角度,围绕z轴旋转(0到359)。0=North, 90=East, 180=South, 270=West 
values[1]: Pitch(俯仰),围绕X轴旋转(-180 to 180), 当Z轴向Y轴运动时是正值
values[2]: Roll(滚),围绕Y轴旋转(-90 to 90),当X轴向Z轴运动时是正值 

注意:这里的定义与航空中定义的yaw、pitch和roll不同,航空中的X轴是沿着飞机的最长边(从头到尾)。

注意:这个传感器类型存在遗留问题,请使用与getRotationMatrix()和remapCoordinateSystem()以及getOrientation()配合使用,来计算值代替得到的值。

重要说明:由于历史的原因,以顺时针旋转的滚动角是正的(从数学上讲,它应该是逆时针方向)

2015-01-19 10:25:53 f059074251 阅读数 35
1.android测量数据
(1)android设备坐标系
[img]http://dev.10086.cn/cmdn/bbs/attachments/editorimg/11-04-01/10-29-53_8ninf3hhzc[/img]
按照上图所示,将手机平放在桌面上来看,手机的左下角是坐标原点,水平向右为x轴,水平向前为y轴,由x轴和y轴正方向叉乘形成的方向为z轴,当手机平放时,z轴指向天空的方向。(2)方向传感器
android的方向传感器可以获取3个数据。
orientation0:y轴在水平面上的投影偏离正北方向的角度,范围0~359度,正北为0,正东为90,正南为180,正西270。
orientation1:y轴和y轴在水平面上投影之间的角度,即y轴与水平面的夹角。
orientation2:x轴和x轴在水平面上投影之间的角度,即x轴与水平面的夹角。
(3)加速度传感器
android的加速度传感器可以获取3个数据。
accelerometerX:x轴方向的加速度-重力加速度在x轴上的分量。
accelerometerY:y轴方向的加速度-重力加速度在y轴上的分量。
accelerometerZ:z轴方向的加速度-重力加速度在z轴上的分量。
根据上述的两个传感器,能够测量出手机x,y,z轴相对于地面参照系的方向和手机相对于手机参照系的加速度。
因为我们项目的需要,要度量出手机相对于地面参照系的加速度,所以需要进行一些计算。
2.相对于地面参照系的加速度的计算
思路:将相对于手机坐标系的3个加速度相对于地面参照系的3个方向分解,再将分解后的加速度分量根据地面参照系的3个方向进行相加合成。得到相对于地面参照系的加速度。
在计算之前,先定义地面参照系的3个方向,垂直向上的方向为1,水平向北的方向为2,水平向东的方向为3.
(1)y轴
首先求y轴的单位向量在地面参照系中3个方向的分量。(这里的o1为orientation1,以此类推)
y0 = (-Math.sin(o1));
y1 = Math.cos(o1)*Math.cos(o0);
y2 = Math.cos(o1)*Math.sin(o0);
(2)x轴
temp = Math.acos(-(Math.tan(o1)*Math.tan(o2)));
x0 = (-Math.sin(o2));
x1 = Math.cos(o2)*Math.cos(o0+temp);
x2 = Math.cos(o2)*Math.sin(o0+temp);
(3)z轴
z0 = x2*y1-x1*y2;
z1 = x0*y2-x2*y0;
z2 = x1*y0-x0*y1;
(4)计算相对于地面参照系的3个方向的加速度(这里的ax为accelerometerX,以此类推)
a0 = ax*x0+ay*y0+az*z0+SensorManager.STANDARD_GRAVITY;(这里加上标准重力加速度以抵消默认的重力加速度)
a1 = ax*x1+ay*y1+az*z1;
a0 = ax*x2+ay*y2+az*z2
这样的a0,a1,a2数据即为手机相对于地面参照系的绝对加速度了。
(5)
当 x=y=0 时,手机处于水平放置状态。
当 x=0 并且 y>0 时,手机顶部的水平位置要大于底部,也就是一般接听电话时手机所处的状态。
当 x=0 并且 y<0 时,手机顶部的水平位置要小于底部。手机一般很少处于这种状态。
当 y=0 并且 x>0 时,手机右侧的水平位置要大于左侧,也就是右侧被抬起。
当 y=0 并且 x<0 时,手机右侧的水平位置要小于左侧,也就是左侧被抬起。
当 z=0 时,手机平面与水平面垂直。
当 z>0 时,手机屏幕朝上。
当 z<0 时,手机屏幕朝下。
(6)
  方向传感器返回值的单位是角度,有三个值分别是
  values[0]: 方位角
  values[1]: 倾斜角
  values[2]: 旋转角
  如同加速度传感器一样,首先Android中 x,y,z 定义是以水平放置在的手机的右下脚为参照系坐标原点
  x 方向就是手机的水平方向,右为正
  y 方向就是手机的水平垂直方向,前为正
  z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
 (7)
方向角的定义是手机y轴 水平面上的投影 与 正北方向的夹角。 (值得范围是 0 ~ 359 其中0=North, 90=East, 180=South, 270=West)
  倾斜角的定义是手机y轴 与水平面的夹角 (手机z轴向y轴方向移动为正 ,值得范围是 -180 ~ 180)
  旋转角的定义是手机x轴 与水平面的夹角 (手机x轴离开z轴方向为正, 值得范围是 -90 ~ 90)
(8)
需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),
  因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.
  比如你以 2 m/s^2 的加速度将手机抛起,这时z方向的返回值应该是 11.8 m/s^2.
  反之若以手机以2 m/s^2 的加速度坠落,则z方向的返回值应该是 7.8 m/s^2.
  x,y方向则没有上述限制。
2014-09-05 09:45:00 weixin_34245169 阅读数 14

1.     产品介绍

该产品可以通过传感器来侦测用户的手势变化进而执行一些操作。比如说信息预览(如短信息预览、日历预览等等),此外,还可以通过指向某一个时间点来预览视频内容、预览音乐播放器(下一首歌曲)内容、预览文件夹内容、预览快速拨号联系人名单以及放大浏览器地址栏等等,给用户更好的操作性,实用性。

2.     产品开发背景

Android平台下的文字阅读,语音识别,该项目是一个测试性项目,目的是为了提升整个团队的项目的技术知识能力和团队主动性,协作性,独立思考性。使团队的每一个成员在今后实际的客户项目中能够有更高的开发效率以及更高的产品质量。

3.     产品面向的用户群体

希望采用语音来代替用手才能控制的某些操作的用户群。比如用语音的方式来启动任何一个应用程序。

4.     产品应当遵循的标准和规范

为了能兼容早期的Android手机,该软件在Android SDK 1.6的API上开发,程序的开发流程遵循本团队内部的开发模式,编码规范严格遵守Java编程规范程序的流程设计采用UML设计,设计工具使用starUml.

5. 产品的功能性需求

 

 

 

5.0 功能性需求分类

 

5.1功能演示

以三星Galaxy S4应用为例。三星Galaxy S4 mini的特点(或者说卖点)之一就是包含了大部分Galaxy S4的高级功能以及完善的传感系统。

                       

△设置Air View

首先是大家耳熟能详的Air View功能,也就是手机可以通过传感器来侦测用户的手势变化进而执行一些操作。比如说信息预览(如短信息预览、日历预览等等),此外,我们还可以通过指向某一个时间点来预览视频内容、预览音乐播放器(下一首歌曲)内容、预览文件夹内容、预览快速拨号联系人名单以及放大浏览器地址栏等等,非常方便。

 

△Air View应用实例:预览短信息内容

 

△Air View应用实例:预览日程表中的事件

 

Air Gesture顾名思义就是通过一些不触摸到手机的“空中操作”来实现一些功能。

 

△Air Gesture功能演示,滚动网页

比方说当我们的手指沾满了水,那么我们可以在网络浏览器中通过手势操作来完成翻页,或者通过平移手掌来实现切换标签、接听来电或者移动应用程序快捷方式等等。毫无疑问,这些丰富的操作将Galaxy S4 mini变为了一台“迷你”体感控制装置。

 

△Air Gesture功能演示,翻页

另外,Air Gesture可以侦测到手掌距离手机屏幕最远7厘米的距离,不过需要注意的是,这项功能仅支持预装的应用,不会支持第三方应用程序(包括谷歌Chrome浏览器也不支持),所以想体验“体感游戏”的用户恐怕要失望了。

 

△Air Gesture功能演示,接听电话

没有更多推荐了,返回首页