2015-03-30 2 views

ответ

2

это то, что я нашел.

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); 
    } 
} 
} 
+2

Большое вам спасибо. Я не пробовал, я попробую. –

+1

Все в порядке. Но датчики приближения не всегда сообщают 1 и 0. См. Мой ответ. – Ayan

+0

@ 김철용. Очень хорошо! За работой ! –

1

Вы можете использовать метод getMaximumRange() для получения максимального диапазона вашего бесконтактного датчика и использовать его, чтобы определить, что делать.

SensorManager sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
float maxRange = proximitySensor.getMaximumRange(); 

Теперь используйте maxRange, чтобы сделать то, что вы хотите.

public void onSensorChanged(SensorEvent event) { 
if(maxRange == event.values[0]) { 
// Do something when something is far away. 
} 
else { 
// Do something when something is near. 
} 
} 

Одна очень важная вещь. Датчик приближения варьируется от устройства к устройству. Он не всегда сообщает 1.0 и 0.0. Например, мой Moto G (1-й генерал) сообщает, что его минимальный диапазон составляет 3 см, а максимальный диапазон - 100 см. Поэтому лучше всего получить максимальный диапазон датчика устройства и использовать его в своем коде, а не жестко кодировать значение.

+2

Спасибо ..... Я попробую .... –

+1

@GuruCharan Я внес некоторые изменения в свой ответ, убедитесь, что вы его проверяете. Я забыл упомянуть об этом в первую очередь. – Ayan

+2

Просьба предоставить файл manifest.xml этого приложения. Я думаю, что для этого нужны некоторые разрешения. Приложение не устанавливает .... –

Смежные вопросы