3

私はこのコードで近接センサーをテストしています:

final SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        final Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
        sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_FASTEST);

そして、手がセンサーから遠く離れているときは 5.0 の値しか得られず、センサーを完全に閉じているときは 0.0 しか得られません。(Nexus S, 4.1 でテストしています) 0 から 5 の間の値を取得できますか?

4

2 に答える 2

3

多くのデバイスでは、近接センサーは基本的にブール型 (「近い」(0) または「遠い」(5)) ですが、これは使用される実際の近接センサーに依存します。

私は Nexus S を持っていないので、そのデバイスを確認することはできませんが、次の情報を報告する私の Samsung GS3 に似ていると推測しています: 名前: GP2A 近接センサー ベンダー: シャープ バージョン: 1 電源: 0.75 最大範囲: 5.0 解像度: 5.0

GS3 でわかるように、解像度は最大範囲と同じであるため、何をしても得られる値は 0 と 5 だけです。

「Android Sensor Box」などのアプリを使用するか、Sensor APIの getMaximumRange() および getResolution() メソッドを使用して、自分のデバイスをチェックアウトできます。

于 2013-06-01T22:17:22.057 に答える
3

また、すべてのメーカーが、近接センサーの近距離と遠距離の状態について異なる値を報告していることに注意してください。その上、一部のスマートフォンの getMaximumRange() は、onSensorChanged で報告された値よりもはるかに高い値を返します。そのため、電話で報告された値を信頼することはできません。私が思いついた唯一の解決策は、onSensorChanged で報告された値を監視し、最高値を記憶することです。値が最高値よりも低い場合は、近接センサーがオブジェクトの近くにあることを意味します。


Motorola Defy: 最低 3、最高 100、getMaximumRange-2.1474836E9 THL
T200: 最低 0、最高 1、getMaximumRange-1
Samsung S5 mini: 最低 0、最高 5、getMaximumRange-4096.0
Nexus S、ソニー Z2: 最低 0、最高 5、getMaximumRange-5

于 2015-04-29T21:32:47.890 に答える