Android 传感器(Sensor)API教程 (一) 常用方法简介

原帖地址:http://www.androidegg.com/portal.php?mod=view&aid=578 谢谢原作者的分享

摘要: 主要介绍传感器的种类,常用方法,事件等,通过例程进行讲解分析。传感器(Sensor)听起来似乎感觉很难,其实它并不是很难。做起来并很有意思的,我相信,通过我对传感器的介绍你会对它感兴趣的,应为你可以切身体会到 ...

1.1 序言   
     在这一章我们主要针对Android的传感器(Sensor)进行说明。如果说Java的程序和硬件有些远的感觉,那么可以说传感器距离硬件很近。传感器(Sensor)听起来似乎感觉很难,其实它并不是很难。做起来并很有意思的,我相信,通过我对传感器的介绍你会对它感兴趣的,应为你可以切身体会到它的存在。

1.2 传感器(Sensor)是什么?
    传感器是能标识温度,加速度等等物理现象的转换电子信号的机器。Android SDK,在移动设备中提供了各种各样的传感器的API。那么,本章的例程,在模拟器中不能使用,这点请大家注意。需要在实际的手机上测试才能体现。这里我就不进行详细进行说明如何连接手机进行运行程序了,在本网站 【Android蛋蛋网】有对应的介绍,请读者自己参照。

1.3  传感器(Sensor)关联的类(Class)和接口(Interface)
     首先,我们对Android SDK提供的传感器关联的类和接口进行介绍。
1.3.1  android.hardware.Sensor类
   
Sensor类,是管理各种传感器的共同属性(名字,版本等等)的类。


●主要的常量
     
在Sensor类,能使用的传感器的种类通过常量来定义的(表1-1)。但是根据硬件,传感器搭载是任意的。比如现在市场销售的(Dev Phone,HTC Dream)实际确认有
TYPE_ACCELEROMETER,
TYPE_ORIENTATION,
TYPE_MAGNETIC_FIELD,
TYPE_TEMPERATURE
四种类别。

表1-1 传感器的种类

常量名
说明
实际的值
TYPE_ACCELEROMETER
加速度
1
TYPE_GYROSCOPE
陀螺仪
4
TYPE_LIGHT
光照
5
TYPE_MAGNETIC_FIELD
磁力计
2
TYPE_ORIENTATION
方位传感器
3
TYPE_PRESSURE
压力传感器
6
TYPE_PROXIMITY
距离传感器
8
TYPE_TEMPERATURE
温度传感器
7
TYPE_ALL
全部的传感器
-1

●主要的方法
     Sensor类的主要的方法参照下面的表1-2

方法
处理内容
public float getMaximumRange()
返回传感器的最大值
public String getName()
返回传感器的名字
public float getPower()
f返回传感器的功率(mA毫安)
public float getResolution()
返回传感器的精度
public int getType()
返回传感器的类型
public String getVentor()
返回Vendor名
public int getVersion()
返回传感器的版本号

1.3.2  android.hardware.SensorManager类
  
SensorManager类是对搭载的移动设备的传感器进行访问的类,用这个类的借口能取得事件监听器的登录/删除、传感器的信息。

●主要的常量
    
在SensorManager有很多个常量被定义,但是这些中最重要的是关于传感器的反应速度的,如(表1-3)。Android,在监听器进行登录的时候通过4个阶段对传感器进行设定的。
表1-3 关于传感器的反映速度的常量

常量名
说明
实际的值
SENSOR_DELAY_FASTEST
在游戏想特别快的反应速度的时候使用
0
SENSOR_DELAY_GAME
游戏用
1
SENSOR_DELAY_UI
用户接口用
2
SENSOR_DELAY_NORMAL
取得倾斜度的时候使用(缺省)
3

●主要的方法
     
SensorManager类的主要方法如表1-4所示
表1-4  SensorManager类的主要方法  
方法
处理内容
public boolean registerListener(
      SensorEventListener listener,
      Sensor sensor,
      int rate)
登录被指定反应速度的监听器。反应速度的指定,使用前面的(表1-3)的SENSOR_DELAY系列常量
public void unregisterListener(SensorEventListener listener)
解除全部的传感器的监听器的登录
public voidunregisterListener(SensorEventListener listener,
         Sensor sensor)
解除在sensor被指定的监听器的登录
public List getSensorLIst(int type)
用list形式取得能使用的传感器的接口


1.3.3  SensorManager类的Instance取得例程
  
 
SensorManager不能直接生成Instance。SensorManager的Instance是通过Context类定义的getSystemService方法取得的。在图1-1的Activity,SensorManager的Instance取得,传感器的名字取得,具体代码如下。

图1-1  传感器的信息取得例程

AndroidEggSensorActivity.java

package androidegg.stu.sensor;

import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AndroidEggSensorActivity extends Activity implements SensorEventListener{
    /** Called when the activity is first created. */
    //SensorManager instance
    private SensorManager sensorManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //get SensorManager instance
        sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE);
        setContentView(R.layout.main);
    }
    
    @Override
    protected void onResume(){
        super.onResume();
        List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        TextView tv;
        for (Sensor s:sensors){
            tv = new TextView(this);
            tv.setText(s.getName());
            layout.addView(tv,new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.FILL_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT));
        }
        setContentView(layout);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        
    }
}

重要点如下所示
1 在onCreate 方法中取得
SensorManager 的Instance
2 在onResume 方法中取得传感器的名字,并表示


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值