Sensor系列五 App實現獲取gsensor資料
阿新 • • 發佈:2019-01-25
一、簡介
前幾篇sensor相關的文章介紹了sensor的hal及framework的知識,這一節以gsensor實時顯示xyz軸座標來分析,app層資料獲取的過程,其實實現資料監控非常簡單,主要分為下面三個步驟:
(1)獲取Sensor服務:getSystemService;
(2)獲取具體sensor物件:getDefaultSensor;
(3)註冊資料監聽器:registerListener;
二、詳細過程分析
下面看實現資料顯示的原始碼:
上面程式碼中getSystemService是一個很重要的API,根據傳入的NAME來取得對應的Object,然後轉換成相應的服務物件,例如:電源、震動、電話等服務,如下表所示。package com.example.yinpengzhang.myapplication_test2; import android.content.Context; 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.widget.TextView; public class MainActivity extends AppCompatActivity implements SensorEventListener{ private TextView mTextView_x = null; private TextView mTextView_y = null; private TextView mTextView_z = null; private SensorManager mSensorManager; private Sensor gsensor; private float mLastX,mLastY,mLastZ; private String sX,sY,sZ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //定義xyz內容顯示框TextView mTextView_x = (TextView) findViewById(R.id.textView6); mTextView_y = (TextView) findViewById(R.id.textView7); mTextView_z = (TextView) findViewById(R.id.textView8); //獲取Sensor服務 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //獲取gsensor的物件 gsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //註冊資料監聽器,當有資料時會回撥onSensorChanged方法 mSensorManager.registerListener((SensorEventListener) this, gsensor, SensorManager.SENSOR_DELAY_NORMAL); } //重寫資料監控的onSensorChanged方法 @Override public void onSensorChanged(SensorEvent event) { if(event.sensor == null) return ; //判斷獲取的資料型別是不是gsensor if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ //獲得資料為float型別的資料 mLastX = event.values[0]; mLastY = event.values[1]; mLastZ = event.values[2]; //將float型別的資料轉為字元型供textView顯示 sX = String.valueOf(mLastX); sY = String.valueOf(mLastY); sZ = String.valueOf(mLastZ); mTextView_x.setText(sX); mTextView_y.setText(sY); mTextView_z.setText(sZ); } } protected void onStop(){ //同樣在退出activity時要登出監聽 super.onStop(); if(mSensorManager != null){ mSensorManager.unregisterListener(this); mSensorManager = null; } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }
傳入的Name | 返回的物件 | 說明 |
WINDOW_SERVICE | WindowManager | 管理開啟的視窗程式 |
LAYOUT_INFLATER_SERVICE | LayoutInflater | 取得xml裡定義的view |
ACTIVITY_SERVICE | ActivityManager | 管理應用程式的系統狀態 |
POWER_SERVICE | PowerManger | 電源的服務 |
ALARM_SERVICE | AlarmManager | 鬧鐘的服務 |
NOTIFICATION_SERVICE | NotificationManager | 狀態列的服務 |
KEYGUARD_SERVICE | KeyguardManager | 鍵盤鎖的服務 |
LOCATION_SERVICE | LocationManager | 位置的服務,如GPS |
SEARCH_SERVICE | SearchManager | 搜尋的服務 |
VEBRATOR_SERVICE | Vebrator | 手機震動的服務 |
CONNECTIVITY_SERVICE | Connectivity | 網路連線的服務 |
WIFI_SERVICE | WifiManager | Wi-Fi服務 |
TELEPHONY_SERVICE | TeleponyManager |
電話服務 |
作者:frank_zyp
您的支援是對博主最大的鼓勵,感謝您的認真閱讀。
本文無所謂版權,歡迎轉載。