android传感器

android传感器的种类
Sensor framework

使用Android的sensor framework,可以访问设备上可用的传感器,获取传感器原始数据。比如:

1.查看设备上可用的传感器。
2.查看某一个传感器的性能,比如它的量程、分辨率、能量要求等。
3.获取测量数据,并且设置刷新频率。
4.注册和注销传感器事件监听器。

Sensor framework是android.hardware这个包的一部分,包含下面一些重要的类:SensorManager, Sensor, SensorEvent, SensorEventListener

识别传感器

Android sensor framework提供了一些方法,使得在运行时可以方便地查看设备上都有哪些传感器。
首先,需要获取sensor service的一个引用;即通过向 getSystemService()
方法中传入SENSOR_SERVICE 参数来创建一个SensorManager类的实例。

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

然后,可以通过在getSensorList() 方法中传入TYPE_ALL来获取设备上的所有传感器。

List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);

如果想要获取指定类型的一系列传感器,可以使用参数TYPE_GYROSCOPETYPE_LINEAR_ACCELERATIONTYPE_GRAVITY等。

对于某种特定类型的传感器来说,设备上含有不止一个这种传感器,那么这些传感器中的一个将被指定为这种类型的默认传感器。使用getDefaultSensor()方法并且传入特定的传感器类型,可以得到此类型的默认传感器。

使用传感器之前需要检测相应的传感器是否存在,因为并不是没台设备都包含想要使用的传感器

Sensor mSensor = mManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
if (mSensor == null){
      //传感器不存在
}

还可以通过Android Market过滤器来限定目标设备必须带有指定的传感器

 <uses-feature
     android:name="android.hardware.sensor.orientation"
     android:required="true">
 </uses-feature>
监听传感器事件

为了检测传感器数据,需要实现SensorEventListener接口中的两个回调方法:onAccuracyChanged()onSensorChanged()

private SensorEventListener listener = new SensorEventListener() {
    /**
     * 传感器事件值改变回调
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
        //判断传感器
        if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
            //读取传感器测量值  
            float angularX = event.values[0];
        }
    }
    /**
     * 传感器精度发生改变时候的回调
     */
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
};
注册和注销传感器监听

通过registerListener方法注册传感器监听

  protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(listener, mLight, SensorManager.SENSOR_DELAY_NORMAL);
  }

通过unregisterListener方法注销传感器监听

  protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(listener);
  }

注:当不需要传感器时你应该关闭它,特别是activity暂停的时候。如果不这么做你的电池会很快消耗完,系统不会在屏幕关闭的时候自动关闭传感器。

registerListener()注册时使用了默认的数据延迟SENSOR_DELAY_NORMAL

数据延迟(或叫采样率)控制着通过onSensorChanged()方法传递传感器事件的间隔。

默认的数据延迟(200,000 microseconds)对于监控屏幕方向改变比较合适;其他的:
SENSOR_DELAY_GAME(20,000 microsecond delay),
SENSOR_DELAY_UI(60,000 microsecond delay),
SENSOR_DELAY_FASTEST(0 microsecond delay),
另外Android 3.0 (API Level 11)可以使用绝对值来设置数据延迟(单位是毫秒)。

设定的延迟只是一个建议性的延迟,Android系统或其他应用可以改变这个延迟。
最好的实践经验是,指定可用的最大延迟,因为系统通常是用一个比你指定的值小一些的值。
这就是说,需要指定满足应用需求的最低的采样率。用比较大的延迟可以使处理器负载较轻,从而消耗更少的能量。

一旦设定后,不必改变采样率;如果因为某种理由你必须改变采样率,你必须注销,然后重新注册这个sensor listener。

传感器坐标系统

通常,sensor framework使用一个标准的三轴坐标系统来表达数值。

对于大多数传感器来说,坐标系统是相对于设备屏幕来说的。

当一个设备被放在其默认的方向上时,X轴是水平指向右的,Y轴是垂直向上的,Z轴是指向屏幕正面之外的,即屏幕背面是Z的负值。


在屏幕方向改变的时候,坐标系中的轴是不会交换的。

不能假设设备的自然(默认)方向是竖直的(portrait),自然方向对于很多的平板设备来说是横向的(landscape)。

坐标系永远是基于设备的自然方向的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Android传感器定义 Android 传感器相关术语微机电传感器(MEMS)MEMS 通常制作在规格很小的硅芯...
    Jannonx阅读 4,240评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 传感器的使用最有名的大概就是微信的摇一摇,和各种记步工具吧,所以只要运用的好,传感器也是一好的方向。可以激发开发者...
    Dddddw阅读 644评论 0 2
  • 这期活动是围绕“书”开始的,高尔基曾说过:“书是人类进步的阶梯”。 书是世界上不可缺少的一样东西, ...
    小飞家阅读 232评论 0 1
  • 童年记忆里,爸爸妈妈经常有冲突。原因五花八门,甚至好像没有什么缘由。 回想起来,爸爸妈妈每次爆发战争,最受伤的人,...
    撒花女子阅读 263评论 0 0