Android物理按键
16lz
2021-12-04
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提供了简便的方法@Overridepublic 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; }
更多相关文章
- android 开发屏蔽home键,返回键
- android 修改电脑盘符名称 USB连接电脑默认连接方式
- Android4.2.2自增物理按键(frameworks)
- Android平台开发-Android(安卓)keypad map-Android按键事件
- Android(安卓)-- Wifi连接流程分析
- android 随笔
- Android(安卓)触摸OnTouchListener没有响应问题解决
- Android组合按键功能定制(Framework)
- Android平台开发-Android(安卓)keypad map-Android按键事件