5.1 相关知识
传感器应用步骤
开发一个对于传感器支持的应用十分简单,开发人员只要在传感器管理器SensorManager中为所要监听的传感器指定一个监听器即可,当外部环境发生变化的时候,Android系统会通过传感器获取外部环境的数据,然后将数据传递给监听器的监听回调方法。具体步骤如下:
1) 获取传感器服务。
2) 从传感器服务中获取到指定类型的传感器。
3) 使用传感器服务添加传感器的监听器。通常在Activity的onResume中,此时Activity置顶可见。
4) 在使用完之后,注销传感器的监听器。通常在Activity生命周期的onStop或者onDestory中
访问传感器很简单,但是在实际开发应用时,往往需要物理、数学等其他科目的知识。例如根据传感器判定人是否在跑步,这种计算就非常复杂,而且不是百分百有效。作者使用的手机在走路比较平稳时就不能准确测得步数。
案例Ex5_1_1,根据光线传感器传感器改变手机背景颜色。当光线比较暗的时候,背景色变深。
步骤1:新建一个Module,命名为Ex5_1_1。
步骤2:修改布局文件,如下。
表5-1-2 Ex5_1_1 activity_main.xml 清单
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@android:color/background_light"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv"
android:textColor="#ff0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>步骤3:修改MainActivity类,如下。
表5-1-3 Ex5_1_1 MainActivity.java清单
package com.example.book.ex5_1_1;
import android.content.Context;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager mSensorManager;
private TextView textView;
private Sensor mLight;
float max, current;
private LinearLayout linearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.tv);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
// 获取传感器管理者对象
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 获取光线传感器对象
mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
String s = "";
max = mLight.getMaximumRange();
s = s + " \n可以测量的最大亮度值 = " + max;
current = sensorEvent.values[0];
s = s + "\n当前亮度=" + current;
if (current > 1000) {
current = 1000;
}
linearLayout.setBackgroundColor(Color.rgb(
(int) (255 * current / 1000),
(int) (255 * current / 1000),
(int) (255 * current / 1000)));
textView.setText(s);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
protected void onResume() {
super.onResume();
//最快刷新速度
mSensorManager.registerListener(this, mLight,
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onStop() {
//释放资源
mSensorManager.unregisterListener(this);
super.onStop();
}
}步骤4:在手机上运行并观察效果。
学员评价