在android中使用接近传感器

我想在我的项目中使用接近传感器。 我search了接近传感器教程。 我在http://www.vogella.com/articles/AndroidSensor/article.html#sensoroverview_managerfind了一个传感器教程。 我尝试使用接近传感器,如下面的代码:

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

我的Activity正在实施SensorEventListener 。 但它不工作。 我需要使用任何权限才能使用接近传感器? 或者我的代码是错误的做这个东西。 你的帮助将非常感激。 谢谢

我使用这个代码:

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

你也可以在GitHub中查看这段代码

你要注册你的听众。 在你的活动中:

 @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()方法,你可以做你的东西与传感器数据。

对不起,如果我的答案为时已晚=)

你可以遵循这个代码 ,它有我们可以编程任何传感器的基本框架。

改变这一行

 linearAcceleration = senseManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 

 proximity = senseManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);