2.感應器學習筆記之光照感應器,感應器學習筆記光照

來源:互聯網
上載者:User

2.感應器學習筆記之光照感應器,感應器學習筆記光照

      這節課我們來學習安卓中的光照感應器,已經會的請繞過此篇。

      安卓系統有個自動調整螢幕亮度的功能。 它會檢測手機周圍環境的光照強度, 然後對手機螢幕的亮度進行相應地調整, 以此保證不管是在強光還是弱光下,手機螢幕都能夠看得清。

說的太多理論有點虛,這裡直接實戰實用光照感應器做個項目。

本課目標:編寫一個簡易的光照探測器程式,使手機可以檢測到周圍環境的光照強度變化。


說明:
燈光照到上面數值會發生改變。
友情提示:
       模擬器無法感知光照強度,因此建議在真實手機上運行。
本科源碼下載:https://github.com/fairyxingyun/Android_Sensors_API

1.首先我們建立一個安卓工程:

2.用TextView來顯示當前的光照強度

    這裡使用一個TextView控制項來顯示光線照強度。
activity_main布局檔案如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.xingyun.androidlightsensordemo.MainActivity" >    <TextView         android:id="@+id/light_level_id"        android:layout_height="wrap_content"        android:layout_width="wrap_content"        android:layout_centerInParent="true"        android:textSize="20sp"/></RelativeLayout>
3.MainActivity.java 幕後處理代碼:
package com.xingyun.androidlightsensordemo;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.TextView;public class MainActivity extends ActionBarActivity {    private TextView showLightLevelTextView;// 顯示光線照感應器強度    private SensorManager sensorManager;// 感應器管理器    private Sensor lightSensor;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        showLightLevelTextView = (TextView) findViewById(R.id.light_level_id);        /***************************************************************************         *          * SensorManager是系統所有感應器的管理器,有了它的執行個體之後         *          * 就可以調用 getDefaultSensor()方法來得到任意的感應器類型了         *          * Sensor.TYPE_LIGHT 常量來指定感應器類型         *          ************************************************************************/        // 擷取到 SensorManager的執行個體        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);        // 指定感應器類型為光照感應器        lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);    }    /*     * 這個方法在活動準備好和使用者進行互動的時候調用。 此時的活動一定位於返回棧的棧頂,並且處於運行狀態。     * */    @Override    protected void onResume() {        // TODO Auto-generated method stub        super.onResume();        /*         * registerListener()方法接收三個參數 第一個參數就是 SensorEventListener 的執行個體,          * 第二個參數是 Sensor 的執行個體,這兩個參數我們在前面都已經成功得到了。          * 第三個參數是用於表示感應器輸出資訊的更新速率,它們的更新速率是依次遞增的。         */        // 調用 SensorManager的 registerListener()方法來註冊 使得監聽生效        sensorManager.registerListener(listener, lightSensor,                SensorManager.SENSOR_DELAY_NORMAL);    }    /*     * 這個方法在系統準備去啟動或者恢複另一個活動的時候調用。      * 我們通常會在這個方法中將一些消耗 CPU 的資源釋放掉,以及儲存一些關鍵資料,但這個方法的執行速度     * 一定要快,不然會影響到新的棧頂活動的使用*/    @Override    protected void onPause() {        // TODO Auto-generated method stub        super.onPause();        sensorManager.unregisterListener(listener);    }    //這個方法在活動被銷毀之前調用,之後活動的狀態將變為銷毀狀態。    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        if (sensorManager != null) {            sensorManager.unregisterListener(listener);        }    }    /**     * 需要對感應器輸出的訊號進行監聽,這就要藉助 SensorEventListener來實現。 SensorEventListener     * 是一個介面,其中定義了 onSensorChanged()和 onAccuracyChanged()這兩個方法     */    private SensorEventListener listener = new SensorEventListener() {        // 當感應器的精度發生變化時就會調用 onAccuracyChanged()方法,        @Override        public void onSensorChanged(SensorEvent event) {            // TODO Auto-generated method stub            /*********************************************************             *              * onSensorChanged()方法中傳入了 一個 SensorEvent 參數             *              * 這個參數裡又包含了一個 values 數組,所有感應器輸出的資訊都是存放在這裡的.             *              * ******************************************************/            float value = event.values[0];            //顯示當前螢幕亮度值            showLightLevelTextView.setText("當前光照強度為:" + value + "lx");        }        // 當感應器監測到的數值發生變化時就會調用 onSensorChanged()方法。        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {            // TODO Auto-generated method stub              }    };}

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.