Android 感應器 (詳解二)—— 常用感應器

來源:互聯網
上載者:User

Android 感應器 (詳解二)—— 常用感應器

 

方向感應器 Orientation (現在幾乎已經不用了,因為其實不存在真正的方向) 磁場感應器 Magnetic Field 溫度感應器 Temperature 光感應器 Light 壓力感應器 Pressure1.方向感應器 Orientation:

用途:
方向感應器用於感應手機裝置的擺放狀態。比如手機頂部的朝向,手機目前的傾斜角度等:藉助於方向感應器,可以開發指南針、水平儀。(註:現在我們一般不用方向感應器來做指南針)

方向感應器返回的三個角度說明:

第一個:表示手機頂部朝向與正北方的夾角。(比如手機繞Z軸旋轉時,該角度發生變化) 第二個:表示手機頂部或底部翹起的角度(比如手機繞X軸傾斜時,該角度值變化-180~180,手機頂部抬起變負值) 第三個:表示表示手機左側或右側翹起的角度(當手機繞Y軸傾斜時,該角度值發生變化範圍-90~90,左側抬起變負值)2.磁場感應器 Magnetic Field:用途:
用於讀取手機裝置外部的磁場強度。隨著手機裝置擺放狀態的改變,周圍磁場在手機的X,Y,Z三個方向上的影響會發生改變。
磁場感應器會返回三個資料: 分別代表周圍磁場分解到X,Y,Z三個方向上的磁場分量。

這裡就不詳細介紹了,後面我們用指南針的執行個體一起來介紹磁場感應器的使用吧。

3.溫度感應器 Temperature :用途:
溫度感應器用於獲得手機裝置所處環境的溫度。
溫度感應器會返回一個資料,該資料代表手機裝置周圍的溫度,單位是攝氏度。4.光感應器 Light:用途:
用於獲得手機裝置所處環境的光的強度。
返回一個資料,代表手機裝置周圍的光的強度,該資料單位是勒克斯(lux)5.壓力感應器 Pressure:用途:
用於擷取手機裝置所處環境的壓力的大小。
返回一個資料,代表手機裝置周圍的壓力的大小。執行個體:

功能:這裡利用幾個文字框來顯示不同的感應器的值。

sensorAcitivity:

package com.example.myapplication.activitys;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.Menu;import android.view.MenuItem;import android.widget.TextView;import com.example.myapplication.R;import com.example.myapplication.baseactivity.BaseActivity;public class SensorActivity extends BaseActivity implements SensorEventListener{//2.必須實現介面    private TextView mTextviewOri;    private TextView mTextviewlight;    private TextView mTextviewcichang;    private TextView mTextviewtemp;    private TextView mTextviewpressure;    private SensorManager mSensorManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sensor);        mTextviewOri = (TextView) findViewById(R.id.textori);        mTextviewlight = (TextView) findViewById(R.id.textlight);        mTextviewcichang = (TextView) findViewById(R.id.textcichang);        mTextviewtemp = (TextView) findViewById(R.id.texttemper);        mTextviewpressure = (TextView) findViewById(R.id.textpressure);        //1.獲得感應器管理服務        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);    }    @Override    protected void onResume() {        super.onResume();        //3.為系統的方向感應器註冊監聽器        mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);        //.為系統的磁場感應器註冊監聽器        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_GAME);        //.為系統的溫度感應器註冊監聽器        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),SensorManager.SENSOR_DELAY_GAME);        //.為系統的光感應器註冊監聽器        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_GAME);        //.為系統的壓力感應器註冊監聽器        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),SensorManager.SENSOR_DELAY_GAME);    }    /**     * 下面兩個方法是實現介面不許實現的方法     * @param event     */    @Override    public void onSensorChanged(SensorEvent event) {//4.獲得資料進行操作        float[] values = event.values;        int sensorType = event.sensor.getType();//擷取觸發event的感應器類型        StringBuilder sb = null;        //判斷是哪個感應器發生改變        switch (sensorType){            //方向感應器            case Sensor.TYPE_ORIENTATION:                sb = new StringBuilder();                sb.append(繞z軸轉過的角度:);                sb.append(values[0]);                sb.append(繞x軸轉過的角度:);                sb.append(values[1]);                sb.append(繞y軸轉過的角度:);                sb.append(values[2]);                mTextviewOri.setText(sb.toString());                break;            //磁場感應器            case Sensor.TYPE_MAGNETIC_FIELD:                sb = new StringBuilder();                sb.append(x方向上的角度:);                sb.append(values[0]);                sb.append(y方向上的角度:);                sb.append(values[1]);                sb.append(z方向上的角度:);                sb.append(values[2]);                mTextviewcichang.setText(sb.toString());                break;            //溫度感應器            case Sensor.TYPE_AMBIENT_TEMPERATURE:                sb = new StringBuilder();                sb.append(當前溫度:);                sb.append(values[0]);                mTextviewtemp.setText(sb.toString());                break;            //光感應器            case Sensor.TYPE_LIGHT:                sb = new StringBuilder();                sb.append(當前光強度:);                sb.append(values[0]);                mTextviewlight.setText(sb.toString());                break;            //壓力感應器            case Sensor.TYPE_PRESSURE:                sb = new StringBuilder();                sb.append(當前壓力:);                sb.append(values[0]);                mTextviewpressure.setText(sb.toString());                break;        }    }    @Override //感應器精度改變時回調的方法    public void onAccuracyChanged(Sensor sensor, int accuracy) {    }    @Override    protected void onPause() {        //程式暫停時取消註冊感應器監聽器        mSensorManager.unregisterListener(this);        super.onPause();    }    @Override    protected void onStop() {        //程式停止時取消感應器監聽器        mSensorManager.unregisterListener(this);        super.onStop();    }}

布局:

                                        

效果:

說明:
實際上,上面的資料類比時都是變化的,但手機其實是沒有動位置的,所以我還不知道是哪裡的問題呢,望知道的大神指教。^^
還有,可以看出,該程式不能擷取感應器和壓力感應器的值,這是因為My Phone並不支援溫度感應器和壓力感應器的讀取。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.