センサートピックス(1) - 関連紹介
1. センサーの紹介:
センサーといえば、例えば、WeChat のシェイクには加速度センサーが使用されていると思います。外部信号、物理的条件(光、熱、 中等度)や化学成分(煙など)を検出し、検出した情報を他の機器や器官に送信します。
センサーの種類: センサーはさまざまな角度から分類でき、変換原理 (センサー動作の基本的な物理学または化学) 効果)出力信号と生産材料およびプロセスなど。一般に、それらはその働きに応じて物理センサーと化学センサーに分類されます。 2つのカテゴリー!携帯電話には基本的に物理センサーが搭載されています:
方位センサー
- 加速度センサー
- ジャイロスコープセンサー
- 磁場センサー
- 近接性センサー
- 光センサー
- 圧力センサー
- 温度センサーセンサー)
- 重力センサー(重力センサー、Android 2.3で導入)
- 線形加速度センサー(線形加速度センサー、でAndroid 2.3)
- 回転ベクトルセンサー (回転ベクトルセンサー、Android 2.3)
- 相対湿度センサー (Android 4.0)
- 近距離無線通信 (NFC) センサー (Android 2.3 で導入)、NFC は異なります他のユーザーからの読み取りと書き込み機能を備えています。
- もちろん、これら以外にも、心拍センサー、歩数センサー、指紋センサーなどがあります。 Android デバイスでサポートされているセンサーの種類については、公式ドキュメントを参照してください: センサー 概要セクション~
コード例
:
レンダリングの実行:
コードの実装:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/txt_show" android:layout_width="match_parent" android:layout_height="match_parent" /> </ScrollView></RelativeLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity { private TextView txt_show; private SensorManager sm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); txt_show = (TextView) findViewById(R.id.txt_show); List allSensors = sm.getSensorList(Sensor.TYPE_ALL); StringBuilder sb = new StringBuilder(); sb.append("此手机有" + allSensors.size() + "个传感器,分别有:\n\n"); for(Sensor s:allSensors){ switch (s.getType()){ case Sensor.TYPE_ACCELEROMETER: sb.append(s.getType() + " 加速度传感器(Accelerometer sensor)" + "\n"); break; case Sensor.TYPE_GYROSCOPE: sb.append(s.getType() + " 陀螺仪传感器(Gyroscope sensor)" + "\n"); break; case Sensor.TYPE_LIGHT: sb.append(s.getType() + " 光线传感器(Light sensor)" + "\n"); break; case Sensor.TYPE_MAGNETIC_FIELD: sb.append(s.getType() + " 磁场传感器(Magnetic field sensor)" + "\n"); break; case Sensor.TYPE_ORIENTATION: sb.append(s.getType() + " 方向传感器(Orientation sensor)" + "\n"); break; case Sensor.TYPE_PRESSURE: sb.append(s.getType() + " 气压传感器(Pressure sensor)" + "\n"); break; case Sensor.TYPE_PROXIMITY: sb.append(s.getType() + " 距离传感器(Proximity sensor)" + "\n"); break; case Sensor.TYPE_TEMPERATURE: sb.append(s.getType() + " 温度传感器(Temperature sensor)" + "\n"); break; default: sb.append(s.getType() + " 其他传感器" + "\n"); break; } sb.append("设备名称:" + s.getName() + "\n 设备版本:" + s.getVersion() + "\n 供应商:" + s.getVendor() + "\n\n"); } txt_show.setText(sb.toString()); } }
3. Sensor センサー関連のメソッドと使用ルーチン
2 の例から、Sensor センサーの取得方法と、センサー関連の情報。 プロセスは次のとおりです。
1) センサー関連のメソッド
ステップ 1: センサーマネージャーを取得する :
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
- ステップ 2: デバイスのセンサーオブジェクトのリストを取得する :
List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
- ステップ 3 : Sensor オブジェクトを繰り返し取得し、対応するメソッドを呼び出してセンサー関連情報を取得します:
for(Sensor s:allSensors){ sensor.getName(); //获得传感器名称 sensor.getType(); //获得传感器种类 sensor.getVendor(); //获得传感器供应商 sensor.getVersion(); //获得传感器版本 sensor.getResolution(); //获得精度值 sensor.getMaximumRange(); //获得最大范围 sensor.getPower(); //传感器使用时的耗电量 }
2) センサー使用ルーチン
一般に、Sensor を直接取得してから取得するということはほとんどありません。以上の情報です!何もないから 最も重要なことは、現在の気圧を取得するなど、センサーによって収集されたデータを取得することです。 あるいは方位センサーの 3 つの角度の値、またはジャイロスコープの値など、センサー データ収集のほとんどは これがルーチンです:
~ステップ 1: センサー マネージャーを取得します:
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
~ステップ 2: 特定のメソッドを呼び出して必要なセンサーを取得します:
たとえば、ここで取得するのは方向センサーです。 、どのセンサーを取得したいですか? API を確認してください~:
Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
~ステップ 3: SensorEventListener インターフェイスを実装し、onSensorChanged メソッドと onAccuracyChanged メソッドを書き換えます。
onSensorChanged: センサーの値が変化すると呼び戻されます。
onAccuracyChanged: センサーのデータを取得する一般的なソースは次のとおりです。この SensorEvent はこのクラスに 1 つあります
値の変数、 型は Float[] です。この変数 には最大 3 つの要素 があり、センサーが異なれば対応する要素によって表される意味も異なります。 たとえば、方向センサーの最初の要素は方位角の値であり、気圧センサーの最初の値は気圧値です。
~ステップ 4: SensorManager オブジェクトは registerListener を呼び出してリスナーを登録します:@Override
public void onSensorChanged(SensorEvent event) {
final float[] _Data = event.values;
this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
このメソッドも非常に単純で、対応するパラメーター:
、Sensor センサー オブジェクト、 センサー遅延時間の精度密度と同様に、4つのオプションの値があります:
- SENSOR_DELAY_FASTEST
- ——遅延: 0ms SENSOR_DELAY_GAME
- ——遅延: 20ms SENS OR_DELAY_UI
- ——遅延: 60ms SENSOR_DELAY_NORMAL
- ——遅延: 200ms もちろん、遅延が低いということは、より頻繁な車両検査を意味し、精度が必要ない場合にはより多くの電力消費も意味します 非常に強くお勧めします 精度が高すぎるものは使用しないでください。一般的には、さらに 3 番目のものを使用してください~自分で測定してください~
これは良い習慣です。一般に、これをアクティビティまたはサービスの破棄メソッドに書き込むことができます:
ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);
わかりました、ルーチンは非常に簡単です~
4. このセクションのサンプル コードをダウンロードします:
このセクションの概要:
さて、このセクションでは Android について説明します。センサーの概要と、携帯電話でサポートされているセンサーを理解する方法、 オンラインで検索するだけでなく、独自のコードを作成してテストすることもできます。最後に、センサー関連の情報を取得する方法とプロセスについても説明します。 センサーデータを収集するルーチンについても説明しました。後で、一般的に使用されるセンサーの使用状況を分析しますので、お楽しみに~