• Android传感器——加速度传感器


    步骤如下:

    1. 调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager,SensorManager对象代表系统的传感器管理服务。

    2. 调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器。

    3. 通常选择在Activity的onResume()方法中调用SensorManager的registerListener()为指定传感器注册监听即可。程序通过实现监听器即可获取传感器传回来的数据。

    SensorManager提供的注册传感器的方法为registerListener(SensorEventListener listener, Sensor sensor, int rate),该方法中三个参数的说明如下。

    >listener:监听传感器事件的监听器。该监听器需要实现SensorEventListener接口。

    >sensor:传感器对象。

    >rate:指定获取传感器数据的频率。

    该方法中rate可以获取传感器数据的频率,它支持如下几个频率值。

    >SensorManager.SENSOR_DELAY_FASTEST:最快。延迟最小,只有特别依赖于传感器数据的应用推荐采用这种频率,该种模式可能造成手机电量大量消耗,由于传递的为原始数据,算法不处理好将会影响应用的性能。

    >SensorManager.SENSOR_DELAY_GAME:适合游戏的频率。在一般实时性要求的应用上适合使用这种频率。

    >SensorManager.SENSOR_DELAY_NORMAL:正常频率。一般实时性要求不是特别高的应用上适合这种频率。

    >SensorManager.SENSOR_DELAY_UI:适合普通用户界面的频率。这种模式比较省电、而且系统开销也很小,但延迟较大,因此只适合在普通小程序中使用。

    下面将会按上面的步骤来开发一个加速度传感器应用。该程序的界面很简单,提供一个文本框来显示加速度值即可,此处不再给出界面布局代码。该应用的Activity代码如下。

    程序清单:codes1515.1AccelerometerTestsrcorgcrazyitsensorAccelerometerTest.java(选自:《疯狂Java讲义 第2版》)
    public class MainActivity extends Activity implements SensorEventListener {
    //定义系统的Sensor管理器
    SensorManager sensorManager;
    EditText etTxt1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取程序界面上的文本框组件
    etTxt1 = (EditText)findViewById(R.id.txt1);
    //获取系统的传感器管理服务
    sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    }

    @Override
    protected void onResume()
    {
    super.onResume();
    //为系统的加速度传感器注册监听器
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    SensorManager.SENSOR_DELAY_GAME);
    }
    @Override
    protected void onStop()
    {
    //取消注册
    sensorManager.unregisterListener(this);
    super.onStop();
    }

    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    //以下是实现SensorEventListener接口必须实现的方法
    //当传感器的值发生改变时回调该方法
    float[] values = event.values;
    StringBuilder sb = new StringBuilder();
    sb.append("X方向上的加速度:");
    sb.append(values[0]);
    sb.append(" Y方向上的加速度:");
    sb.append(values[1]);
    sb.append(" Z方向上的加速度:");
    sb.append(values[2]);
    etTxt1.setText(sb.toString());
    }
    }

    package org.crazyit.sensor;
    
    import android.app.Activity;
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.widget.EditText;
    
    /**
     * Description:
     * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>
     * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public class AccelerometerTest extends Activity
        implements SensorEventListener
    {
        // 定义系统的Sensor管理器
        SensorManager sensorManager;
        EditText etTxt1;
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // 获取程序界面上的文本框组件
            etTxt1 = (EditText) findViewById(R.id.txt1);
            // 获取系统的传感器管理服务
            sensorManager = (SensorManager) getSystemService(
                Context.SENSOR_SERVICE);  //
        }
    
        @Override
        protected void onResume()
        {
            super.onResume();
            // 为系统的加速度传感器注册监听器
            sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_GAME);  //
        }
    
        @Override
        protected void onStop()
        {
            // 取消注册
            sensorManager.unregisterListener(this);
            super.onStop();
        }
    
        // 以下是实现SensorEventListener接口必须实现的方法
        // 当传感器的值发生改变时回调该方法
        @Override
        public void onSensorChanged(SensorEvent event)
        {
            float[] values = event.values;
            StringBuilder sb = new StringBuilder();
            sb.append("X方向上的加速度:");
            sb.append(values[0]);
            sb.append("
    Y方向上的加速度:");
            sb.append(values[1]);
            sb.append("
    Z方向上的加速度:");
            sb.append(values[2]);
            etTxt1.setText(sb.toString());
        }
    
        // 当传感器精度改变时回调该方法。
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy)
        {
        }
    }
  • 相关阅读:
    MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】
    移动端如何解决页面返回上次浏览位置问题
    php对接java接口
    php后端遇到的问题
    jquery 判断字符串长度
    phpExcel常用方法详解
    html 手机端适配不同手机高度 ,把内容居中显示
    html 手机端 生成海报
    没错,老师就是个勤奋负责有良心的职业,不,的人
    睡眠是自然的第二道菜
  • 原文地址:https://www.cnblogs.com/2008nmj/p/5626873.html
Copyright © 2020-2023  润新知