传感器学习案例 之 公交防盗

需求 :当手机从衣服兜里被掏出时,手机响铃报警。

原理 : 使用距离传感器,当距离从 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();
        }
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值