センサートピックス(1) - 関連紹介


1. センサーの紹介:

センサーといえば、例えば、WeChat のシェイクには加速度センサーが使用されていると思います。外部信号、物理的条件(光、熱、 中等度)や化学成分(煙など)を検出し、検出した情報を他の機器や器官に送信します。

センサーの種類: センサーはさまざまな角度から分類でき、変換原理 (センサー動作の基本的な物理学または化学) 効果)出力信号と生産材料およびプロセスなど。一般に、それらはその働きに応じて物理センサーと化学センサーに分類されます。 2つのカテゴリー!携帯電話には基本的に物理センサーが搭載されています:

方位センサー

  • 加速度センサー
  • ジャイロスコープセンサー
  • 磁場センサー
  • 近接性センサー
  • 光センサー
  • 圧力センサー
  • 温度センサーセンサー)
  • 重力センサー(重力センサー、Android 2.3で導入)
  • 線形加速度センサー(線形加速度センサー、でAndroid 2.3)
  • 回転ベクトルセンサー (回転ベクトルセンサー、Android 2.3)
  • 相対湿度センサー (Android 4.0)
  • 近距離無線通信 (NFC) センサー (Android 2.3 で導入)、NFC は異なります他のユーザーからの読み取りと書き込み機能を備えています。
  • もちろん、これら以外にも、心拍センサー、歩数センサー、指紋センサーなどがあります。 Android デバイスでサポートされているセンサーの種類については、公式ドキュメントを参照してください: センサー
  • 概要セクション~

2. 携帯電話でサポートされているセンサーを確認するには?

各携帯電話に搭載されているセンサーの種類は、すべての携帯電話で利用できるわけではありません。 たとえば、私が所有している Nexus 5 でサポートされているセンサーの種類は次のとおりです。 重力、光、距離、気圧、ジャイロスコープ!驚くべきことに、第 2 世代の moto X は重力、軽さ、 距離センサーと赤外線センサー!携帯電話でサポートされているセンサーの種類については、関連するレビューを参照してください。 Zhongguancun Mobile Online、Pacific などの Web サイトで独自のモデルを検索し、関連するパラメータを表示します。 もちろん、独自のコードを作成して、携帯電話がサポートするセンサーの種類を確認することもできます~

コード例

:

レンダリングの実行:

コードの実装1.gif:

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) {
}
このメソッドも非常に単純で、対応するパラメーター:

Context オブジェクト

Sensor センサー オブジェクトセンサー遅延時間の精度密度と同様に、4つのオプションの値があります:

    SENSOR_DELAY_FASTEST
  • ——遅延: 0ms
  • SENSOR_DELAY_GAME
  • ——遅延: 20ms
  • SENS OR_DELAY_UI
  • ——遅延: 60ms
  • SENSOR_DELAY_NORMAL
  • ——遅延: 200ms
  • もちろん、遅延が低いということは、より頻繁な車両検査を意味し、精度が必要ない場合にはより多くの電力消費も意味します 非常に強くお勧めします 精度が高すぎるものは使用しないでください。一般的には、さらに 3 番目のものを使用してください~自分で測定してください~

~ステップ 5: リスナーの登録を解除します:

これは良い習慣です。一般に、これをアクティビティまたはサービスの破棄メソッドに書き込むことができます:

ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

わかりました、ルーチンは非常に簡単です~


4. このセクションのサンプル コードをダウンロードします:

SensorDemo1.zip


このセクションの概要:

さて、このセクションでは Android について説明します。センサーの概要と、携帯電話でサポートされているセンサーを理解する方法、 オンラインで検索するだけでなく、独自のコードを作成してテストすることもできます。最後に、センサー関連の情報を取得する方法とプロセスについても説明します。 センサーデータを収集するルーチンについても説明しました。後で、一般的に使用されるセンサーの使用状況を分析しますので、お楽しみに~2.jpg