当我的手靠近接近传感器时,我想播放一个重复的音频,而当手从传感器移开时,我要停止音频。这是我编写的代码。当我靠近接近传感器时,音频会播放,但是当我的手移开时,音频不会停止。有什么建议么?提前致谢。
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor proxy;
TextView tv;
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
proxy = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
tv = (TextView) findViewById(R.id.tv);
//tv.setText("Maximum range = " + proxy.getMaximumRange() + proxy.getName());
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,proxy,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_PROXIMITY){
mp = MediaPlayer.create(this,R.raw.alarm);
if(event.values[0] < proxy.getMaximumRange()){
mp.start();
mp.setLooping(true);
}
else{
mp.stop();
}
//tv.setText("SEnsor NOT activated");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
最佳答案
每当调用onSensorChanged(SensorEvent事件)时,您的代码都会初始化媒体播放器。
当您尝试调用stop()方法时,该方法正在刚刚创建的新对象中被调用,而先前的对象已经在内存中运行警报的某个位置,因此不会停止。
根据文档,如果尚未调用start(),stop()无效,理想情况下,它应该引发异常,但显然没有任何作用。
我修改了您的代码,我建议该代码应该(可能)正常工作。
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor proxy;
TextView tv;
static final MediaPlayer mp= MediaPlayer.create(this,R.raw.alarm);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
proxy = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
tv = (TextView) findViewById(R.id.tv);
/**
* set on prepared listener
*/
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setLooping(true);
}
});
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,proxy,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_PROXIMITY){
if(event.values[0] < proxy.getMaximumRange()){
mp.prepareAsync();
}
else{
mp.stop();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
关于android - 当一个人靠近距离传感器时如何播放重复的音频,而当他离开时如何停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677616/