android 连接蓝牙键盘事件监听
记一次通过蓝牙键盘触发事件,在对应的Activity复写onKeyUp每次按键或长按保证只触发一次
@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_TAB: // 右上角“左右切换”按钮...break;case KeyEvent.KEYCODE_NUMPAD_1: // 用户点击 1...break;case KeyEvent.KEYCODE_NUMPAD_2: // 用户点击 2...break;case KeyEvent.KEYCODE_NUMPAD_3: // 用户点击 3...break;case KeyEvent.KEYCODE_NUMPAD_4: // 用户点击 4...break;case KeyEvent.KEYCODE_NUMPAD_5: // 用户点击 5...break;case KeyEvent.KEYCODE_NUMPAD_6: // 用户点击 6...break;case KeyEvent.KEYCODE_NUMPAD_7: // 用户点击 7...break;case KeyEvent.KEYCODE_NUMPAD_8: // 用户点击 8...break;case KeyEvent.KEYCODE_NUMPAD_9: // 点 9...break;case KeyEvent.KEYCODE_NUMPAD_ADD: // 点“+”...break;case KeyEvent.KEYCODE_NUMPAD_SUBTRACT: // 点“-”...break;case KeyEvent.KEYCODE_NUMPAD_ENTER: // 点“⏎”...break;case KeyEvent.KEYCODE_9: // 点“[”...break;case KeyEvent.KEYCODE_0: // 点“]”...break;default:break;}return true;}
注意:不同型号手机事件的keyCode可能不同,例如“=”有可能是KEYCODE_EQUALS或者KEYCODE_NUMPAD_EQUALS
接收系统广播对蓝牙开关以及蓝牙键盘的连接状态进行监听,Activity中动态注册广播
private BluetoothMonitorReceiver bleListenerReceiver = null;private void registerBluetoothMonitorReceiver(){bleListenerReceiver = new BluetoothMonitorReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);registerReceiver(bleListenerReceiver, intentFilter);}
在onDestroy()中解除注册
@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(bleListenerReceiver);}
蓝牙状态监听的广播类
public class BluetoothMonitorReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (action != null) {switch (action) {case BluetoothAdapter.ACTION_STATE_CHANGED:int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);switch (blueState) {case BluetoothAdapter.STATE_ON:Toast.makeText(context, "蓝牙已打开", Toast.LENGTH_SHORT).show();break;case BluetoothAdapter.STATE_OFF:Toast.makeText(context, "蓝牙已关闭", Toast.LENGTH_SHORT).show();break;}break;case BluetoothDevice.ACTION_ACL_CONNECTED:Toast.makeText(context, "蓝牙设备:" + device.getName() + "已连接", Toast.LENGTH_SHORT).show();break;case BluetoothDevice.ACTION_ACL_DISCONNECTED:Toast.makeText(context, "蓝牙设备:" + device.getName() + "已断开", Toast.LENGTH_SHORT).show();break;}}}
}
权限(如果需要在程序中开启或关闭蓝牙还需要admin权限)
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
BLE:一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范后的BLE(Bluetooh Low Energy)蓝牙称为低功耗蓝牙。蓝牙低能耗技术是短距离、低成本、可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗。
ACL:蓝牙基带技术支持两种连接类型:同步定向连接(SCO)类型和异步无连接(ACL)类型。前者主要用于同步话音传送,后者主要用于分组数据传送。
android 连接蓝牙键盘事件监听相关推荐
- Android学习按键事件监听与Command模式
Android学习按键事件监听与Command模式 - Dufresne - 博客园 Android学习按键事件监听与Command模式 一 Command模式 意图: 将一个请求封装为一个对象,从而 ...
- Android——按钮的事件监听
关于Button按钮的四种事件监听方法总结 首先我们在activity_main.xml里面先定义一个Button空间 <RelativeLayout xmlns:android="h ...
- Android截屏事件监听
1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserv ...
- android按钮怎么事件监听,android 通过监听edittext实现button的点击事件
如果你没有接第三方的输入设备,那么点击按钮只需找到你的button然后:button.performClick(); 就可以了 那么如果你用到第三方输入法,有些时候监听就没有这么好使了: 以下场景为: ...
- android 监听拍照,Android 拍照 截图 事件监听实现
需求是获得用户截图,或者拍照的主动存图行为. 但是 android 官方没有提供回调广播之类的实现监听,所以需要用另一种方式达到需求,这里实现的就是通过监听media文件夹实现目的. 所需权限: an ...
- android 鼠标滚轮事件监听
/** * Implement this method to handle generic motion events. * 实现该方法来处理一般的MotionEvent: * 一般的motion e ...
- android动态监听事件,Android-常见的事件监听
在Android的开发中,我们会遇到各种各样的事件监听.下面给大家分享一下,希望对Android感兴趣的小伙伴有帮助. Android常见的事件监听 单击事件onClickListener 长按事件o ...
- ℃江让您从精通到入门:OnClick事件监听的几种方式
笔译笔,不如人之比,见一见,不与人为鉴.苍天下, 弃细雨,混泪难断谁更惆:苍穹再,散绸绫,铺洒漫染何出犹. 今天笔者来说下Android中OnClick事件监听的几种书写方式. 匿名内部类的方式 pa ...
- Android DownloadManager下载完成事件监听(系列4)
Android DownloadManager下载完成事件监听(系列4) 我在之前写了写一些关于Android DownloadManager 的文章: (系列1)<Android大数据. ...
最新文章
- pythonのgevent同步异步区别
- date oracle 表中_从 MySQL 迁移数据到 Oracle 中的全过程
- 【CV项目实战】纯新手如何从零开始完成一个工业级图像分割任务的整个流程?...
- php curl hostname,php – 如何解决cURL错误(7):无法连接到主机?
- python echo命令_如何用Python调用外部命令
- apache开源项目 -- tajo
- 51nod1432 独木舟
- 路由重发布之RIP和OSPF
- Android Animation时间插入器Interpolator
- linux 中ifconfig命令 结果解释
- java中输入输出总结
- 多个apple苹果设备(iphone,mac,pad,icloud)之间同步数据
- 用VS Code写 Python / Groovy / Kotlin
- React入门第一天(绑定事件,动态渲染,修改样式、传参)
- Android Jetpack组件之App Startup,源码+原理+手写框架
- Semantic UI 之 按钮 button
- 蚂蚁金服java二面_蚂蚁金服Java开发二面
- 解决nginx error!The page is temporarily unavailable.
- 阿里云虚拟主机和服务器的区别
- Kettle-时间维度的生成