現在では、画面の明るさを自動で調整する機能(光センサー)や、携帯電話を振る機能(加速度センサー)など、携帯電話の多くの機能がセンサーによって完結しています。しかし、Android のセンサーが何であるか知っていますか?
Android の公式表示によると、Android センサーは 3 つのカテゴリに分類できます
Android プラットフォームは 3 種類のセンサーをサポートしています。
- モーションセンサー
これらのセンサーは、3 軸に沿った加速度と回転力を測定します。このカテゴリには、加速度センサー、重力センサー、ジャイロスコープ、回転ベクトル センサーが含まれます。
- 環境センサー
これらのセンサーは、周囲の気温と圧力、照度、湿度などのさまざまな環境パラメータを測定します。このカテゴリには、気圧計、光度計、温度計が含まれます。
- 位置センサー
これらのセンサーは、デバイスの物理的な位置を測定します。このカテゴリには、方位センサーと磁力計が含まれます。
現在スマートフォンでサポートされている一般的なセンサー
センサー | Javaでの名前 | ローカルインターフェース名 | 価値 |
---|---|---|---|
加速度計 | TYPE_ACCELEROMETER | SENSOR_TYPE_ACCELEROMETER | 1 |
磁界センサー | タイプ_マグネティック_フィールド | センサータイプ_マグネティック_フィールド | 2 |
方向センサー | TYPE_ORIENTATION | SENSOR_TYPE_ORIENTATION | 3 |
ジャイロセンサー | タイプ_ジャイロスコープ | SENSOR_TYPE_GYROSCOPE | 4 |
光センサー | タイプライト | センサータイプ_ライト | 5 |
圧力センサー | タイプ_圧力 | センサータイプ_圧力 | 6 |
温度センサー | TYPE_AMBIENT_TEMPERATURE | センサータイプ_温度 | 7 |
距離センサー | TYPE_PROXIMITY | SENSOR_TYPE_PROXIMITY | 8 |
次に、3種類のセンサーについて説明します。
タイプ 1: モーションセンサー
センサーの可能なアーキテクチャは、センサーの種類によって異なります。
- 重力、線形加速度、回転ベクトル、アクティブ モーション、歩数カウンター、および歩数検出センサーは、ハードウェアまたはソフトウェア ベースです。
- 加速度センサーとジャイロセンサーは常にハードウェアベースです。
2 番目のタイプ: 環境センサー
Android プラットフォームには、さまざまな環境属性を監視できる環境センサーとして 4 つのセンサーが用意されています。これらのセンサーを使用して、Android デバイスの近くの相対周囲湿度、照度、周囲圧力、周囲温度を監視できます。4 つの環境センサーはすべてハードウェア ベースであり、デバイス メーカーがデバイスに組み込んだ後にのみ使用できます。
3 番目のタイプ: 距離センサー
Android プラットフォームは、地磁気センサーと加速度センサーという、デバイスの位置を特定できる 2 つのセンサーを備えた距離センサーを提供します。Android プラットフォームには、デバイスの顔と物体との間の距離を測定できるセンサー(近接センサーと呼ばれます) も提供されています。地磁気センサーと近接センサーはハードウェアベースです。ほとんどの携帯電話やタブレットのメーカーには地磁気センサーが搭載されています。同様に、携帯電話のメーカーは、携帯電話がユーザーの顔に近づけられたとき (通話中など) を判断するための近接センサーを搭載していることがよくあります。デバイスの向きを判断するには、デバイスの加速度計と地磁気センサーからの測定値を使用できます。
紹介から始めましょう
センサーフレーム
クラス/インターフェース | 導入 |
---|---|
センサーマネージャー | このクラスを使用して、センサー サービスのインスタンスを作成できます。このクラスは、センサーへのアクセスと一覧表示、センサー イベント リスナーの登録と登録解除、および方向情報の取得のためのさまざまなメソッドを提供します。このクラスは、センサーの精度の報告、データ取得速度の設定、センサーの校正のためのいくつかのセンサー定数も提供します。 |
センサー | このクラスを使用して、特定のセンサーのインスタンスを作成できます。このクラスは、センサーの機能を決定できるさまざまなメソッドを提供します。 |
センサーイベント | システムは、このクラスを使用して、センサー イベントに関する情報を提供するセンサー イベント オブジェクトを作成します。センサー イベント オブジェクトには、生のセンサー データ、イベントを生成したセンサーの種類、データの精度、イベントのタイムスタンプなどの情報が含まれます。 |
センサーイベントリスナー | このインターフェイスを使用して、センサー値が変化したとき、またはセンサーの精度が変化したときに通知 (センサー イベント) を受信する 2 つのコールバック メソッドを作成できます。 |
センサーマネージャーオブジェクトを取得する
// 获取传感器管理者对象
SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
指定されたセンサーオブジェクトを取得します
//获取全部的传感器
List list = sensorManager.getSensorList(Sensor.TYPE_ALL);
// 获取指定的传感器
Sensor sensor = mSensorManager.getDefaultSensor(int type);
//例:获取加速度传感器
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
登録を解除する
//解除注册--不要忘记了,把它加在合适的地方
sensorManager.unregisterListener(this,sensor);
完全なセンサー コードを取得する
public class SensorActivity extends AppCompatActivity {
private SensorManager sensorManager;
private List<Sensor> list;
private Button mGetSensor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
mGetSensor = findViewById(R.id.get_sensor);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
list = sensorManager.getSensorList(Sensor.TYPE_ALL);
mGetSensor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setSensor();
}
});
}
public void setSensor() {
Log.d("传感器:", "一共有" + list.size() + "个传感器");
for (int i = 0; i < list.size(); i++) {
String sensortext = "对应的type" + list.get(i).getType()
+ " 设备名称:" + list.get(i).getName()
+ " 设备版本:" + list.get(i).getVersion()
+ " 供应商:" + list.get(i).getVendor();
switch (list.get(i).getType()) {
case Sensor.TYPE_ACCELEROMETER:
Log.d("传感器:", "加速度传感器-->" + sensortext);
break;
case Sensor.TYPE_GYROSCOPE:
Log.d("传感器:", "陀螺仪传感器-->" + sensortext);
break;
case Sensor.TYPE_LIGHT:
Log.d("传感器:", "环境光线传感器-->" + sensortext);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
Log.d("传感器:", "电磁场传感器-->" + sensortext);
break;
case Sensor.TYPE_ORIENTATION:
Log.d("传感器:", "方向传感器-->" + sensortext);
break;
case Sensor.TYPE_PRESSURE:
Log.d("传感器:", "压力传感器-->" + sensortext);
break;
case Sensor.TYPE_PROXIMITY:
Log.d("传感器:", "距离传感器-->" + sensortext);
break;
case Sensor.TYPE_TEMPERATURE:
Log.d("传感器:", "温度传感器-->" + sensortext);
break;
case Sensor.TYPE_GRAVITY:
Log.d("传感器:", "重力传感器-->" + sensortext);
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
Log.d("传感器:", "线性加速度传感器-->" + sensortext);
break;
case Sensor.TYPE_ROTATION_VECTOR:
Log.d("传感器:", "旋转矢量传感器-->" + sensortext);
break;
case Sensor.TYPE_RELATIVE_HUMIDITY:
Log.d("传感器:", "周围环境相对湿度传感器-->" + sensortext);
break;
}
}
}
}
各種センサーの詳しい使い方については後述
ポータル