手機中的傳感器之光線傳感器(Android實現)

手機中的光線傳感器()實現監聽

手機中的傳感器:

            手機中的大多數傳感器的監聽實現相差無幾,大多數實現方式如下:
                  1.定義傳感器管理器,用於獲取傳感器類型和註冊和取消註冊監聽器。
                  2.定義傳感器,用於獲取傳感器管理器獲取的傳感器。
                  3.(注意!!)因爲一系列安全問題,最好設置一個按鈕取消傳感器監聽器的註冊。

具體佈局:

                         1.開始、關閉監聽爲兩個按鈕
                   2.即將顯示光照強度部分爲TextView顯示文本


實現後的界面:




具體代碼實現:

//     
//  手機光線傳感器監聽的實現Android版    
//  Created by Scarborough_Coral on 2017/3/3.    
//  Copyright © 2017年 Scarborough_Coral. All rights reserved.    
//   
package com.coral.lightsenor;
//需要導入的包
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView showLightPower;//用於顯示光照強度的文本視圖
    private Button start;//按鈕,點擊開始監聽傳感器
    private Button stop;//按鈕,點擊停止監聽傳感器
    private SensorManager sensorManager;//傳感器管理器,用於獲取傳感器服務,和選擇傳感器類型
    private Sensor sensor;//傳感器對象,儲存光線傳感器的數據
    private SensorEventListener sensorEventListener;//傳感器事件監聽器,用於傳感器事件的監聽

    /**
     * 函數功能:入口函數
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //獲取並設置app佈局文件
        setContentView(R.layout.activity_main);
        //初始化控件
        InitWidgets();
        //初始化傳感器相關,包含傳感器管理器和傳感器的設定
        InitSensors();
        //設置按鈕點擊監聽器和傳感器事件監聽器
        setListener();
    }

    /**
     * 函數功能:初始化傳感器相關,包括傳感器管理器和傳感器類型
     */
    private void InitSensors() {
        sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);//初始化傳感器管理器
        sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);//給傳感器初始化類型
    }

    /**
     * 函數功能:通過匿名內部類的方式實現按鈕和傳感器監聽器接口,實現按鈕和傳感器的監聽
     */
    private void setListener() {
        sensorEventListener=new SensorEventListener() {
            /**
             * 函數功能:重寫傳感器參數改變時實現的方法
             * @param event
             */
            @Override
            public void onSensorChanged(SensorEvent event) {
                String showInfo="";//用於存儲傳感器的光強信息
                showInfo="光照強度:"+event.values[0]+"勒克斯";
                showLightPower.setText(showInfo);//設置TextView的顯示光線傳感器光強信息
            }

            /**
             * 當傳感器參數精度改變時,可以通過本方法實現
             * @param sensor
             * @param accuracy
             */
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        };
        //設置開始監聽按鈕被點擊時實現註冊傳感器事件監聽器
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    sensorManager.registerListener(sensorEventListener,sensor,0);//註冊傳感器
            }
        });
        //設置關閉監聽按鈕被點擊時實現取消註冊傳感器事件監聽器
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    sensorManager.unregisterListener(sensorEventListener);
            }
        });
    }

    /**
     * 函數功能:初始化控件
     */
    private void InitWidgets() {
        //獲取textview和button的實例
        showLightPower= (TextView) findViewById(R.id.showLightPower);
        start= (Button) findViewById(R.id.startListen);
        stop= (Button) findViewById(R.id.stopListen);
    }
}

這次博客文章就到這裏了,請多多支持……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章