美文网首页
Android入门总结-传感器

Android入门总结-传感器

作者: 克罗地亚催眠曲 | 来源:发表于2017-03-11 21:42 被阅读25次

最近看了一下Android,只看书不总结一下,总感觉东西并没有放在脑子里,人过留名,雁过留声,遂写下这篇总结。

书本看的是《Android编程兵书》,但这篇总结的大纲是按照《第一行代码》的章节目录撰写的。两本书的内容结构大致相同,Android入门的话只看其中一本就够了。

本章内容比较易懂,重要的是如何巧妙传感器来设计一个好的APP,因此直接上代码。

简易光照探测器

public class Activity extends Activity{
    
    private SensorManager sensorManager;

    private TextView lightLevel;

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

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

    private SensorEventListener listener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent event){
            float value = event.values[0];
            lightLevel.setText("Current light level is " + value + "lx");
        }

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

加速传感器模仿微信摇一摇代码示例

public class MainActivity extends Activity{
    
    private SensorManager sensorManager;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

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

    private SensorEventListener listener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent event){
            float xValue = Math.abs(event.values[0]);
            float yValue = Math.abs(event.values[1]);
            float zValue = Math.abs(event.values[2]);

            if(xValue > 15 || yValue > 15 || zValue > 15){
                Toast.makeText(MainActivity.this, "摇一摇", Toast.LENGTH_SHORT).show();
            }
        }

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

    }
}

方向传感器:判断手机在各个方向上的旋转角度(指南针,地平仪)
Android推荐的方式:通过加速传感器和地磁传感器共同计算得出手机旋转的方向和角度
简易指南针核心代码


private SensorEventListener listener = new SensorEventListener(){
    
    float[] accelerometerValues = new float[3];
    float[] magneticValues = new float[3];
    private float lastRotateDegree;

    public void onSensorChanged(SensorEvent event){
        if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            accelerometerValues = event.values.clone();
        }else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
            magneticValues = event.values.clone();
        }

        float[] values = new float[3];
        float[] R = new float[9];
        //getRotationMatrix方法计算出的旋转数据赋值到R
        //第二个参数用于将地磁向量转换成重力坐标的旋转矩阵,指定为null即可
        //第三四个参数加速度sensor和地磁sensor输出的values
        SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
        //计算手机的旋转数据
        // values[0]    绕Z轴旋转弧度
        // values[1]    绕X轴旋转弧度
        // values[2]    绕Y轴旋转弧度
        SensorManager.getOrientation(R, values);

        float rotateDegree = -(float)Math.toDegrees(values[0]);//弧度换成角度
        if(Math.abs(rotateDegree - lastRotateDegree) > 1){
            // 共六个参数
            // 起始角度 终止角度
            // 后四个指定旋转的中心点
            RotateAnimation animation = new RotateAnimation(lastRotateDegree, rotateDegree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            animation.setFillAfter(true);
            compassTmg.startAnimation(animation);
            lastRotateDegree = rotateDegree;
        }
    }

}

相关文章

  • Android入门总结-传感器

    最近看了一下Android,只看书不总结一下,总感觉东西并没有放在脑子里,人过留名,雁过留声,遂写下这篇总结。 书...

  • Android传感器

    一.Android的三大类传感器 Android传感器按大方向划分大致有这么三类传感器:动作(Motion)传感器...

  • 传感器

    一.Android的三大类传感器 Android传感器按大方向划分大致有三类传感器:动作(Motion)传感器、环...

  • Android传感器(第一篇)

    Android传感器定义 Android 传感器相关术语微机电传感器(MEMS)MEMS 通常制作在规格很小的硅芯...

  • Android 传感器总结

    最近项目需要各种手机传感器,于是就此来写个总结,以此留痕。在Android开发中,会用到各种传感器,但不一定每个真...

  • 关于Android传感器

    最近项目需要各种手机传感器,于是就此来写个总结,以此留痕。在Android开发中,会用到各种传感器,但不一定每个真...

  • Android传感器应用开发

    Android传感器应用开发 Android系统提供了对传感器的支持,如果手机设备的硬件提供了这些传感器,Andr...

  • Android开发高级进阶——传感器

    Android系统提供了对传感器的支持,如果手机设备的硬件提供了这些传感器,Android应用可以通过传感器来获取...

  • Android 传感器开发详解

    Android 传感器开发详解 传感器 传感器的分类 方向传感器 陀螺仪传感器 磁场传感器 重力传感器 线性加速度...

  • Android的传感器开发

    在Android系统中开发传感器应用十分简单,因为Android系统为传感器支持提供了强大的管理服务,同样传感器的...

网友评论

      本文标题:Android入门总结-传感器

      本文链接:https://www.haomeiwen.com/subject/jwuzgttx.html