android 按键无响应,翻车现场之Android遥控按键无响应

问题现象

新项目开始,QA 报了个问题,蓝牙遥控器配对后按键就不响应了.......

好吧,很明显蓝牙遥控器没配对之前肯定是走红外过去的,配对以后就变成走蓝牙了,现在是按键走蓝牙有问题,那就看看吧。

开始 Debug

首先想到用 getevent 试试,输入后发现一切正常,按键后有键值打印出来,那就再往上看看。

然后通过 logcat 直接 grep keycode 发现 key 经过 Android input 到 windowsManger 后 keycode 变成了 0x00,好吧,难怪会没有响应。

那从什么时候 keycode 从有值变成 0x00 呢?

然后有请 printf 大法,同时把 android input 相关模块的全部打印开出来,再加了几条打印。

编译 push 进去最后发现是在按键转换的时候进去的时候还正常出来就变 0x00 了。

到这里大概能猜到是 keymap 文件出了问题了。

分析解决

在 android 里面按键的转换是由 KeyLayoutMap 文件完成的,我们可以为每个输入设备添加 KeyLayoutMap 文件, 也可以直接使用系统提供的默认 KeyLayoutMap 文件 Generic.kl。

当系统识别到一个新的输入设备后,便会去为其找到合适的 kl 文件,它的查找顺序如下:

/odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl

/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl

/system/us

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用element-ui提供的表单验证来验证该字段是否为空。示例代码如下: ``` <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="事故形态" prop="xingtai" pop="xingtai"> <el-select v-model="form.xingtai" @change="chaxingtai(form.xingtai)" placeholder="请选择事故形态" size="small" > <el-option label="碰撞" value="碰撞"></el-option> <el-option label="刮蹭" value="刮蹭"></el-option> <el-option label="碾压" value="碾压"></el-option> <el-option label="翻车" value="翻车"></el-option> <el-option label="坠车" value="坠车"></el-option> <el-option label="失火" value="失火"></el-option> <el-option label="撞固定物" value="撞固定物"></el-option> <el-option label="撞静止车辆" value="撞静止车辆"></el-option> <el-option label="其他" value="其他"></el-option> </el-select> <div v-if="xingtaiqita" style="width: 200px"> <el-input type="textarea" v-model="form.select_1" size="small" clearable ></el-input> </div> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { xingtai: '', select_1: '' }, xingtaiqita: false, rules: { xingtai: [ { required: true, message: '请选择事故形态', trigger: 'change' } ] } } }, methods: { chaxingtai(value) { if (value === '其他') { this.xingtaiqita = true } else { this.xingtaiqita = false } }, submitForm() { this.$refs.form.validate(valid => { if (valid) { // 表单验证通过,提交表单 console.log('submit') } else { // 表单验证失败 console.log('error submit') return false } }) } } } </script> ``` 在上面的代码中,我们给`el-form-item`组件设置了`prop`属性为`xingtai`,这是为了在验证时使用。在`rules`中,我们设置了`xingtai`字段必填,如果该字段为空,则会提示用户选择事故形态。在`submitForm`方法中,我们调用了`this.$refs.form.validate()`方法来进行表单验证,如果验证成功,则可以提交表单,否则会提示用户错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值