android studio中光线传感器解析

  要学习Android须要先了解android activity的生命历程,请看下图(他人博客复制):图中咱们能够清晰可看到android的生命周期,onCreate() ,onStart(),onResume(),onPause(),以及onDestroy().java

  通过几个月的学习,我才发发现这几个生命历程不单单只是其生命历程,在程序运行的过程当中起着关键的做用。在android运行过程当中android系统会根据程序的生命状态运行相应的程序,好比建立的时候运行onCreate中的方法,onCreate中能够说是android程序的主体部分,主要的实现实在其中调用与执行,当activity销毁是会执行相应的onDestroy中的方法,总之在不一样的生命状态调用或执行相应的--状态方法(笔者取名),注意一下即可以更好的控制android程序的执行。android

  言归正传,下面讲解android中光线传感器的简单调用。app

  第一步确定是布局文件实现:ide

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <--用于对传感器信息的显示-->
    <TextView
        android:id="@+id/sonsor_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="TextView"/>
<--光线传感器数据显示-->
<TextView
android:id="@+id/light_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="TextView"/>
</LinearLayout>

  这里设置了2个文本布局(原谅我不会用这个编辑),你们能够注意一下在xml中注释的写法<........>。布局

其次,是程序文件:学习

public class MainActivity extends Activity {
    SensorManager sensorManager;
    Sensor sensor;
    TextView sensordata;
    TextView lightdata;


    @Override
    protected void onCreate(Bundle savedInstanceState) {             //注意状态方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sensorManager=(SensorManager) this.getSystemService(SENSOR_SERVICE);        //传感器服务
        sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);               //指定传感器
        StringBuffer stringBuffer=new StringBuffer();          //构建StringBuilder对象
        stringBuffer.append("\n sensor name");
        stringBuffer.append(sensor.getName());              //得到传感器名称
        stringBuffer.append("\n power(MA)");
        stringBuffer.append(sensor.getPower());             //电量消耗
        stringBuffer.append("\n type");
        stringBuffer.append(sensor.getType());              //类型编号
        stringBuffer.append("\n version");
        stringBuffer.append(sensor.getVersion());               //版本
        stringBuffer.append("\n maxRange");
        stringBuffer.append(sensor.getMaximumRange());
        sensordata=(TextView) findViewById(R.id.sonsor_data);
        lightdata=(TextView) findViewById(R.id.light_data);
        sensordata.setText(stringBuffer);
    }
    private SensorEventListener sensorEventListener=new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {        //注意这个改变方法,会由于传感器只改变而执行
            float[] value= sensorEvent.values;
            lightdata.setText("light value"+value[0]);          //value包含3个值,x,y,z但对与光线传感器只有第一个值
        }

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

        }
    };

    @Override
    protected  void onResume(){                                 //注意状态方法
        super.onResume();
        sensorManager.registerListener( sensorEventListener,sensor,SensorManager.SENSOR_DELAY_NORMAL);      //注册传感器
    }

    @Override
    protected  void onPause(){                      //注意状态方法
        super.onPause();
        sensorManager.unregisterListener( sensorEventListener);           //取消注册          }
}
 注释写的还算清楚,看懂应该没啥大问题。执行结果以下:   

关于Android学习,个人推荐书籍请看另外一篇博客,谢谢观看!
ui