Android Manager の SensorManager --- 距離センサー

1. 距離センサー インスタンスを取得します。

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

2. センサー イベント リスナーを登録します。

sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL);

registerListener メソッドの 3 つのパラメーターは、次のように説明されています。

最初のパラメーター Listener: SensorEventListener、ここではインスタンス クラスが SensorEventListener を実装しているので、これを渡します。

2 番目のパラメーター Sensor: センサー。ここでは、距離センサーのインスタンスに proxySensor を渡します。

3 番目のパラメーター samplingPeriodUs (サンプリング期間): ここでは、SensorManager.SENSOR_DELAY_NORMAL を渡します。

 

3. onSensorChanged および onAccuracyChanged メソッドを書き直します。

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onSensorChanged(SensorEvent event) {
    if (isHeadset) {
        return;
    }
    float[] its = event.values;
    System.out.println("its[0]:" + its[0]);
    if (its[0] == 0.0) {  //贴近手机
        switchSpeaker(false);
        tv_on_speakerphone.setTextColor(Color.parseColor("#62696C"));
        tv_on_speakerphone.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.drawable.on_speakerphone, 0, 0);
        tv_on_speakerphone.setTag(false);
    } else {  //远离手机
        switchSpeaker(true);
        tv_on_speakerphone.setTextColor(Color.parseColor("#D6E3F4"));
        tv_on_speakerphone.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.drawable.on_speakerphone_highlight, 0, 0);
        tv_on_speakerphone.setTag(true);
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

備考: 距離センサーを使用して実装する機能は次のとおりです。

イヤホンが差し込まれていないときは、センサーが距離を判断し、スピーカーを自動的にオン/オフします。

4.使用していないときに登録をキャンセルします。

sensorManager.unregisterListener(this);

備考:その他のセンサーについては、基本的に以下の 4 つの手順に従ってください。

トピック外: センサーを使用するときは、SensorManager を使用します。Android では、ネットワーク処理に使用する ConnectivityManager、wifi 関連の操作に使用する WifiManager、オーディオ関連の操作に使用する AudioManager など、さまざまなマネージャーが設計されていることがわかります。では、なぜ Android でさまざまなマネージャーを設計するのでしょうか。なぜ私たちはそのような構造を持っているのでしょうか?

例として SensorManager の使用を取り上げます. センサーを使用する場合, まず SensorManager を取得してから SensorManager を操作します. この APP では、マネージャーのみが表示されます.

サービス プロセスとアプリケーションは異なるプロセスで実行されるため、アプリケーションはサービスとのプロセス間通信を確立する必要があります。

多くの面倒な詳細が追加されているため、Manager メカニズムの導入により、共有サービスを隠しながらインターフェイスを公開するという目的が達成されます。

このアプローチは、アプリケーション層の開発者がより便利に開発するのに役立ちます。 

おすすめ

転載: blog.csdn.net/zdj_Develop/article/details/121516918