2013-07-31 19 views
8

Desidero utilizzare il sensore di prossimità nel mio progetto. Ho cercato tutorial per sensori di prossimità. E ho trovato un tutorial sui sensori al http://www.vogella.com/articles/AndroidSensor/article.html#sensoroverview_manager. Ho cercato di utilizzare come sensore di prossimità seguente codice:Utilizzo del sensore di prossimità in Android

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

mio Activity sta attuando SensorEventListener. Ma non funziona. Devo usare qualche permesso per usare il sensore di prossimità? O il mio codice è sbagliato per fare questa roba. Il tuo aiuto sarà molto apprezzato. Grazie

+0

si può mostrare il codice di installazione? – Ifor

+2

Ci sono più tutorial per ** Sensore di prossimità ** su Android. Per prima cosa, sviluppa una corretta comprensione leggendo questo [articolo su ** Sensore di prossimità su Android **] (http://thecodeartist.blogspot.in/2011/01/proximity-sensor-on-android-gingerbread.html). Successivamente, le seguenti esercitazioni [** 1 **] (http://androidbite.blogspot.in/2013/05/android-proximity-sensor-example.html) e [** 2 **] (http: // velmuruganandroidcoding.blogspot.in/2013/05/proximity-sensor-in-android-example.html) dovrebbe essere di aiuto. Inoltre ti consiglierei di eseguire il tuo codice su un dispositivo reale con sensore di prossimità dato che è abbastanza semplice: – Rahil2952

+0

nell'esempio di risposta fornito http://androidbite.blogspot.com/2013/05/android-proximity-sensor-example. html –

risposta

8

Io uso questo codice:

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) { 

    } 

} 

Inoltre è possibile check this code in GitHub

+1

È improbabile che funzioni. Il mio dispositivo (Moto X 2013 su Android 5.1.1) riporta "3.0" vicino allo stato, quindi questo codice mostrerebbe sempre "lontano" –

+1

Ciao Marcin Kozinski, ho avuto lo stesso problema, puoi controllare la mia altra domanda e rispondere [qui ] (http://stackoverflow.com/questions/35767115/unregisterlistener-doesnt-work-with-proximity-screen-off-wake-lock). Spero di poterti aiutare. – Cabezas

+1

Sei sicuro di aver collegato la giusta domanda/risposta? Sembra non correlato e ha lo stesso problema: si assume che "near" sia sempre "0", quindi su alcuni telefoni non verrà mai riportato "near". Per ora sto controllando 'if (event.values ​​[0]

2

devi registrare il tuo ascoltatore. Nella vostra attività:

@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); 
} 

e poi nel metodo sovresposta onSensorChanged() si può fare le tue cose con i dati del sensore.

Scusate se la mia risposta è troppo tardi =)

0

È possibile follow this code che ha la struttura di base con il quale siamo in grado di programma qualsiasi sensore

Modificare questa linea

linearAcceleration = senseManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 

a

proximity = senseManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
Problemi correlati