2013-07-31 3 views
8

Я хочу использовать датчик приближения в своем проекте. Я искал учебник бесконтактного датчика. И я нашел учебник по датчикам в http://www.vogella.com/articles/AndroidSensor/article.html#sensoroverview_manager. Я пытался использовать датчик близости, как следующий код:Использование датчика приближения в android

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_PROXIMITY) 
    { 
     Toast.makeText(getApplicationContext(), "working", Toast.LENGTH_SHORT).show(); 
    } 
} 

Мой Activity реализует SensorEventListener. Но это не работает. Должен ли я использовать любое разрешение на использование датчика приближения? Или мой код не подходит для этого. Ваша помощь будет очень оценена. Спасибо

+0

Можете ли вы показать код установки? – Ifor

+2

Есть несколько учебных пособий для ** Датчик приближения ** на Android. Во-первых, создайте правильное понимание, прочитав это [статья о ** Датчик приближения на Android **] (http://thecodeartist.blogspot.in/2011/01/proximity-sensor-on-android-gingerbread.html). Далее следуют следующие учебники [** 1 **] (http://androidbite.blogspot.in/2013/05/android-proximity-sensor-example.html) и [** 2 **] (http: // velmuruganandroidcoding.blogspot.in/2013/05/proximity-sensor-in-android-example.html) должен помочь. Также я бы посоветовал вам запустить ваш код на реальном устройстве с датчиком приближения, поскольку он довольно прямолинейный. – Rahil2952

+0

приведен пример ответа, приведенный http://androidbite.blogspot.com/2013/05/android-proximity-sensor-example. html –

ответ

8

Я использую этот код:

import android.content.Context; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements SensorEventListener { 

    private SensorManager mSensorManager; 
    private Sensor mProximity; 
    private static final int SENSOR_SENSITIVITY = 4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 

    } 

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

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

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) { 
      if (event.values[0] >= -SENSOR_SENSITIVITY && event.values[0] <= SENSOR_SENSITIVITY) { 
       //near 
       Toast.makeText(getApplicationContext(), "near", Toast.LENGTH_SHORT).show(); 
      } else { 
       //far 
       Toast.makeText(getApplicationContext(), "far", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

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

    } 

} 

Также вы можете check this code in GitHub

+1

Это вряд ли сработает. Мое устройство (Moto X 2013 на Android 5.1.1) сообщает '3.0' как о состоянии, поэтому этот код всегда будет показывать« далеко » –

+1

Привет, Марцин Козински, у меня была такая же проблема, вы можете проверить мой другой вопрос и ответить [здесь ] (http://stackoverflow.com/questions/35767115/unregisterlistener-doesnt-work-with-proximity-screen-off-wake-lock). Я надеюсь, что смогу вам помочь. – Cabezas

+1

Уверены ли вы, что вы связались с правильным вопросом/ответом? Он выглядит не связанным и имеет ту же проблему: предполагается, что «рядом» всегда «0», поэтому на некоторых телефонах он никогда не будет сообщать «рядом». На данный момент я просто проверяю 'if (event.values ​​[0]

2

Вы должны зарегистрировать свой слушатель. В Вашей деятельности:

@Override 
public final void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Get an instance of the sensor service, and use that to get an instance of 
    // a particular sensor. 
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
} 

@Override 
protected void onResume() { 
    // Register a listener for the sensor. 
    super.onResume(); 
    mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
} 

, а затем в методе вы перекрываться onSensorChanged() вы можете сделать свой материал с данными датчиков.

Извините, если мой ответ будет слишком поздно =)

0

Вы можете follow this code, который имеет базовую основу, используя которую мы можем программа любой датчик.

Изменение этой линии

linearAcceleration = senseManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 

в

proximity = senseManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);