亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android 傳感器的使用方法

標簽:
Android
传感器简介

手机中内置的传感器是一种微型的物理设备,它能够探探测、感受外界的信号,并按一定规律转换成数值信息。
常见的传感器如光照传感器、加速度传感器、地磁场传感器、压力传感器、温度传感器……


传感器调用

Android 中每个传感器用法类似,只要遵循下面的步骤。
第一步:获取 SensorManager 的实例

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

SensorManager 是系统所有传感器的管理器。

第二步:获取 Sensor 传感器类型

调用 SensorManager 实例的 getDefaultSensor( )方法得到任意传感器的类型。

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

Sensor参数下有多有多个常量,表示不同的传感器名称:

加速传感器(Sensor.TYPE_ACCELEROMETER)
磁场传感器(Sensor.TYPE_MAGNETIC_FLELD)
光线传感器 ( Sensor.TYPE_LIGHT )

第三步:对传感器信号进行监听

借助 SensorEventListener 对传感器输出的信号进行监听。

    SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            //当传感器监测到的数值发生变化时就会调用 onSensorChanged 方法
            //SensorEvent 参数中又包含了一个 values 数组
            // 所有传感器输出的信息都存放在 values 数组中
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            //传感器的精度发生变化时就会调用 onAccuracyChanged 方法                }
    };

event.vaues 的长度为3,每个数组元素的含义不同。

Accelerometer(加速传感器)
values[0] : 沿x轴方向加速度
values[1] : 沿 y 轴方向的加速度
values[2] : 沿 z 轴方向的加速度,也就是重力加速度
+
Gyroscope( 陀螺传感器)
values:分别表示x,y,z轴的旋转的角速度
+
Light(光线传感器)
values数组只有第一个元素values[0]有意义,表示光线的强度,最大值是120000.0f.

第四步:注册 SensorEventListener

调用 SensorManager 的 registerListener( ) 方法来注册 SensorEventListener 使其生效。

sensorManager.registerListener(listener,sensor,sensorManager.SENSOR_DELAY_NORMAL);

SensorManager下有多个常量,表示传感器的更新速度。

SensorManager.SENSOR_DELAY_FASTEST: 以最快的速度获得传感器数据
SENSOR_DELAY_GAME: 适合与在游戏中获得传感器数据
SENSOR_DELAY_NORMAL: 以一般的速度获得传感器数据
SENSOR_DELAY_UI :适合于在ui空间中获得数据
这四种更新速率依次递减

另外始终要记得,当程序退出或传感器使用完毕时,一定要调用 unregisterListener( )方法将使用的资源释放掉: sensorManager.unregisterListener(listener);


传感器使用示例
public class TestActivity extends Activity {

    private SensorManager sensorManager;
    //第三步:对传感器信号进行监听
    private SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            //提示当前光照强度
            Toast.makeText(TestActivity.this,
                    "当前光照强度:" + event.values[0] + "勒克斯", Toast.LENGTH_SHORT).show();
        }

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

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //第一步:获取 SensorManager 的实例
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //第二步:获取 Sensor 传感器类型
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        //第四步:注册 SensorEventListener
        sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //传感器使用完毕,释放资源
        if(sensorManager!=null){
            sensorManager.unregisterListener(listener);
        }
    }
}
點擊查看更多內容
23人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消