需求 :当手机从衣服兜里被掏出时,手机响铃报警。
原理 : 使用距离传感器,当距离从 0 变为 1 时,使用 MediaPlayer 播放声音文件报警
步骤 :
1. 设置布局文件 : 添加一个报警按钮开关,用于开启/停止报警功能
2. 声明成员变量
// 声明 Button 变量
private Button bt;
// 声明传感器管理器
private SensorManager sm;
// 声明 MediaPlayer
private MediaPlayer player;
// 声明一个传感器对象
private Sensor sensor;
// 标记当前防盗功能是否开启
private boolean isOpen = false;
3、 使用当前继承 SensorEventListener 并复写抽象方法
@Override
public void onSensorChanged(SensorEvent event) {
// 获取距离传感器的值
float value = event.values[0];
if (value > 0) {
try {
// 如果距离大于 0 则播放音乐
player.start();
} catch (Exception e) {
e.printStackTrace();
}
} else {
// 如果距离等于 0 暂停音乐
player.pause();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
4、实现Button的按钮事件 ,点击开启或者关闭音乐
public void click(View view) {
if (isOpen) {// 如果开启
// 暂停音乐
player.pause();
// 使按钮显示提示文字
bt.setText("防盗已经关闭");
// 取消传感器监听
sm.unregisterListener(this);
isOpen = false;
} else {// 如果没有开启
// 播放音乐
player.start();
bt.setText("防盗已经开启");
// 注册传感器监听
sm.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
isOpen = true;
}
}
5、 复写Activity 的onCreate 方法,在该方法里面实现 MediaPlayer的初始化以及传感器的监听
protected void onCreate (Bundle savedInstanceSate){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化变量
bt = (Button)findViewById(R.id.bt);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
//获取距离传感器
sensor = sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
//创建MediaPlayer对象
player = MediaPlayer.create(this,R.raw.apple);
//给MediaPlayer 设置播放完事事件监听
player.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
//播放完后重新播放
mp.start();
}
});
}