Android应用软件开发

194课时
1.7K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
3分钟

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:在手机上运行并观察效果。