2

Возможно ли получить текущее значение датчика приближения в Android?Как получить текущее значение датчика приближения Android?

Я знаю, что я могу использовать SensorManager и Sensor и зарегистрировать измененный прослушиватель состояния, но мне не нужно уведомлять о каждом изменении состояния, поэтому было бы крайне неэффективно, так как этот код запускается в службе. Кроме того, мой код не будет знать значение до тех пор, пока не произойдет изменение состояния (что, если значение не изменилось ... откуда я знаю, что это такое? Вместо того, чтобы регистрировать слушателя, я просто хочу сказать:

proximitySensor.getCurrentDistance(); 

возможно ли это?

Благодаря

ответ

3

После просматривал документации, это выглядит, как вы можете получить расстояние в сантиметрах, подписавшись на SensorEvent и глядя на эти данные, передаются обратно.

Существует хороший пример начинают использовать датчик приближения здесь: Android Proximity Sensor Example

После прочтения немного дальше в Android docs, это выглядит как массив values[0] возвращает значение в сантиметрах. Обратите внимание, посмотрите на документы, некоторые датчики возвращают только двоичные значения, что означает, что устройство находится либо близко, либо далеко.

+0

Да, но я и спрашиваю, как сделать это без использования этих слушателей. – Nullqwerty

+0

Из моего сообщения: «Я знаю, что могу использовать SensorManager и Sensor и регистрировать измененный слушателем состояние, но мне не нужно уведомлять о каждом изменении состояния, поэтому он будет очень неэффективным, поскольку этот код запускается в службе Кроме того, мой код не будет знать значение до тех пор, пока не произойдет изменение состояния (что, если значение не изменилось ... откуда я знаю, что это такое? » – Nullqwerty

+1

Прошу прощения, я был многозадачным, отвечая, моя ошибка. Я не знаю, что есть какой-то другой способ, чем слушать изменения. – user3924722

0

Чтобы получить доступ к датчику устройства с помощью SensorManager, вам необходимо вызвать getSystemService (SENSOR_SERVICE). Вот пример:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
tools:context=".SensorActivity" > 

<ImageView 
android:id="@+id/imageView1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/far" /> 

</RelativeLayout> 

Вот класс Java:

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.widget.ImageView; 

public class SensorActivity extends Activity implements SensorEventListener { 
private SensorManager mSensorManager; 
private Sensor mSensor; 
ImageView iv; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sensor_screen); 
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    iv = (ImageView) findViewById(R.id.imageView1); 
} 

protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mSensor, 
    SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(this); 
} 

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

public void onSensorChanged(SensorEvent event) { 
    if (event.values[0] == 0) { 
    iv.setImageResource(R.drawable.near); 
    } else { 
    iv.setImageResource(R.drawable.far); 
    } 
} 
} 
Смежные вопросы