Android物理按键

Android物理按键及物理连接

--自拍杆拍照

github博客地址

1.拦截按键按下抬起时的事件分发

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
    //如果是长按事件交给onKeyLongPress处理
        if (event.getRepeatCount() > 0)
            return onKeyLongPress(event.getKeyCode(), event);

        return super.dispatchKeyEvent(event);
    }

2.返回按键

//返回键的监听很常见,android提供了简便的方法
@Override
public void onBackPressed() {
        finishThisPage();
}

3.按键按下事件处理(音量,耳机按键,back键)

//home键和power键没有监听到
//我当时需要的是音量键和耳机按键可以拍照,是可以监听到的
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        L.info(event.toString());
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                L.info("KEYCODE_VOLUME_DOWN-音量键减小声音");
                return true;
            case KeyEvent.KEYCODE_VOLUME_UP:
                L.info("KEYCODE_VOLUME_UP-音量键增加声音");
                return true;
            case KeyEvent.KEYCODE_VOLUME_MUTE:
                L.info("KEYCODE_VOLUME_MUTE-音量键静音");
                return true;
            case KeyEvent.KEYCODE_HEADSETHOOK:
                L.info("KEYCODE_HEADSETHOOK-耳机线按键");
                return true;
            case KeyEvent.KEYCODE_BACK:
                L.info("KEYCODE_BACK-返回键");
                return true;
        }
        return super.onKeyDown(keyCode, event);
    }

4.其他事件

//使用快捷键可以快速选中菜单中的某一项,在Android没有什么卵用
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem add = menu.add("");
        add.setShortcut('A','A');
        return super.onCreateOptionsMenu(menu);
    }
@Override
    public boolean onKeyShortcut(int keyCode, KeyEvent event) {
        L.info("onKeyShortcut  " + event.toString());
        return super.onKeyShortcut(keyCode, event);
    }

@Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        L.info("onKeyLongPress  " + event.toString());
        return super.onKeyLongPress(keyCode, event);
    }

 //暂时没有用到,网上有说在手写和汉字输入时会触发
@Override
    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
        L.info("onKeyMultiple  " + event.toString());
        return super.onKeyMultiple(keyCode, repeatCount, event);
    }

//按键抬起时会触发
@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        L.info("onKeyUp   " + event.toString());
        return super.onKeyUp(keyCode, event);
    }

5.检测耳机线,蓝牙耳机是否连接

private boolean checkControlIsConnected() {
        //检测耳机线是否连接
        AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
        //这个方法已经过时,api介绍仅仅用来检测是否连接,可以注册广播接收者接受耳机插拔的广播
        if (am.isWiredHeadsetOn()) {
            //耳机插入
            return true;
        }

        //检测蓝牙设备是否连接
        BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
        //蓝牙适配器是否存在,即是否发生了错误
        if (ba == null || !ba.isEnabled()) {
            //蓝牙不可用
            return false;
        } else if (ba.isEnabled()) {
            Set<BluetoothDevice> bondedDevices = ba.getBondedDevices();
            if (bondedDevices == null || bondedDevices.size() <= 0) {
                //当前没有设备连接
                return false;
            } else {
                for (BluetoothDevice d : bondedDevices) {
                    if (d.getBondState() == BluetoothDevice.BOND_BONDED) {
                        //当前有设备接入并处于连接状态
                        return true;
                    }
                }
            }

        }
        return false;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值