Android 小米盒子游戏手柄按键捕获

太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载。谢谢合作。

最终又告一段落,能够好好歇息一下了。

曾经。提及身体,总是再坚持一下。就这样坚持了 15 年。

如今。提及生命。不敢再坚持一下,还是休养一段,再整装前行。也来得及。

记得高中老师教导过我们,歇息是学习的重要组成部分。

那么,休养是工作、生活的重要组成部分,就合情合理了。

我是一个闲不住的人。时刻都感到危机的存在。不敢稍停脚步。狠怕被后面的穷鬼追上,或是前面的曙光遗忘。

不知从何时開始。还有一种危机感由然而生,

总是预见到自已无力去做到眼前的小事。倍感心凉。渐而被生命遗忘。

趁此良机。边休养。边捣腾一下家里的小米套装。

以下就晒晒我这个非米粉所拥有的米装备。能够解读为显摆,只是很多其他要吐槽或者是期待吧:

1、红米 Note 手机一部;

2、小米盒子增强版一块(像个圆圆的河流石,所以论块了。只是配的是三星的电视,最初并不太信任小米。故没直购电视)

3、小米路由器(内置 1T 硬盘,家里台式机。IBM笔记本和MacBookAir以及联想、红米、苹果等手机的照片自己主动备份上来。真是太帅了。之前买过一个 BT3 的开发版套了个小盒子,只是做起来确实有困难,最难只是电源管理)

4、小蚁摄像头(不论什么有 WIFI 的地方,用手机都能看到家里。并用手机实时对讲)

5、小米插座(用来控制三星电视的电源,这样不论什么一款电视,都被纳入到小米家族了,只是尚缺一个带学习功能的红外,或许仅仅有 Arduino 能搞定了)

6、小米游戏手柄一对儿(玩儿了近两周了。游戏虽少,但确都非常耐玩)

7、小米灯泡、小米体重称,一直在观注,多次立即要付款了。突然又放弃了,在我的思维中并没有答案,但我知道我的潜意识肯定有她的道理。

今儿个把小米盒子用手机数据线连接到 MacBookAir 上。稍加设置,就能够调试了:

一是打开电视中设置里的调试开关项;

二是直接运行时,电视上会提示,点同意就能够了;

想做点小东西,即能让小孩拿游戏手柄玩,又能以算术做为工具来玩,这个小东西,不知道叫啥,不知道咋分类,但我知道,首先得能识别到游戏手柄的各个按键才行,小米官方有按键码说明《电视/盒子应用开发指南》,只是对于我这非常少用和记这些键码的人来说,这个确有用处不大,我还是直接获取到键码值,反馈出来让我自个儿知道即可了。这样能推断哪个键能识别到。哪个不能识别到。基本当下的任务就完毕了。

先来看一下 Activity 响应按键按下事件的重载方法:

	@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event);
}

super.onKeyDown(keyCode, event); 方法的实现 Anroid 源代码例如以下节选:

    public boolean onKeyDown(int keyCode, KeyEvent event)  {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.ECLAIR) {
event.startTracking();
} else {
onBackPressed();
}
return true;
}

当按下返回键时,目标版本号大于 ECLAIR 即 SDK 2.1,就会运行

    event.startTracking();

aaarticlea/png;base64,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" alt="" />

翻译:在 Callback.onKeyDown 运行期间调用该方法。使系统跟踪当前键按下事件,直到结束(可能包括一个长按事件)。

注意,同一时候仅仅能有一个键被跟踪 -- 假设在前一个键被跟踪的时侯收到了还有一个键按下事件,前一个事件跟踪行为停止。

通过查看 Android 源代码,你会发现

    return super.onKeyDown(keyCode, event);

    return super.onKeyUp(keyCode, event);

有一个配合点,以下贴 onKeyUp 源代码就非常easy看出来了:

    public boolean onKeyUp(int keyCode, KeyEvent event) {
if (getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.ECLAIR) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
onBackPressed();
return true;
}
}
return false;
}

当中这一句

    keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()

先推断是返回按键,然后推断该事件是否处于跟踪状态,即在 onKeyDown 中 

    event.startTracking();

开启的跟踪状态,而且推断该事件对象未处于取消状态,那么符合这三个条件,就正好与 onKeyDown 配合上了。

当按键按下时。跟踪状态开启。一直没有其他按键按下的情况下,按键松开,通过系统跟踪的该按键事件状态,确定返回按键完毕了一次完整的

按下松开,即运行 onBackPressed() ,源代码例如以下 :

    public void onBackPressed() {
if (!mFragments.popBackStackImmediate()) {
finish();
}
}

该方法和 onKeyDown 方法中版本号小于 SDK 2.1 时调用的是同一个,当中调用了 finish() 方法,即结束当前 Activity 。

由以上分析能够掌握最终返回按键的处理过程,怎样结束当前 Activity 的,接下来要实现二次按返回键再关闭当前 Activity ,

先声明当前主线程下的 Handler:

	Handler handler=new Handler();

接下来重载 onKeyDown 方法

	@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case 3:
dealResult = dealWithHomeKey();
break;
case 4:
dealResult = dealWithBackKey();
break;
default:
break;
} if (!dealResult) {
finish();
} return true;
//return super.onKeyDown(keyCode, event);
}

方法 dealWithBackKey() 处理返回按键,先声明类成员变量,用于记录状态

	boolean ifBack = false;
boolean ifHome = false;
boolean dealResult = false;
long delayCancelInterval = 3000;

然后声明 dealWithBackKey() 方法进行处理

    boolean dealWithBackKey() {

    	if (!ifBack) {

    		// 响应按键设置取消标识,在被延迟取消前再次按返回键。则退出
ifBack = true; // 延迟几秒取消返回标识
handler.postDelayed(new Runnable() { @Override
public void run() { ifBack = false;
}
}, delayCancelInterval); Toast.makeText(this, "再按一下返回键。退出应用", Toast.LENGTH_SHORT).show(); // 返回 true ,事件不再继续向上传递
return true;
} return false;
}

或者单独声明 Runnable ,能够留出取消 Runnable 的余地。只是感觉用处不大,此处仅供技术參考

	Runnable delayCancelBack = new Runnable() {

		@Override
public void run() { ifBack = false;
}
};

再看看 dealWithBackKey() 方法

    boolean dealWithBackKey() {

    	if (!ifBack) {

    		// 响应按键设置取消标识,在被延迟取消前再次按返回键,则退出
ifBack = true; // 延迟几秒取消返回标识
handler.postDelayed(delayCancelBack, delayCancelInterval); Toast.makeText(this, "再按一下返回键,退出应用", Toast.LENGTH_SHORT).show(); // 返回 true ,事件不再继续向上传递
return true;
} return false;
}

对照一下,感觉后者能更好一些,相对清晰,且功能分离,随时可替换。

话说回来,不管是 Java 的匿名内部类还是 OC 的 Block 。作为一种先进的编程语言元素,并非随处使用的。有节有度才干达到预期效果。

针对于上面的代码,感觉直接内嵌内部类要好些。毕竟逻辑不非常复杂。假设逻辑非常复杂,不能作为当前被嵌入代码的简单扩展。那么。还是声明并用变量索引,然后再使用。相对能把两个复杂的逻辑范畴隔离开,引用的范畴内代码逻辑清晰,但凝视一定要配合得当。才干非常好地掩盖内部实现。

以上代码在小米盒子增强版运行通过,Android SDK 4.4.2。 Mac Book Air 开发环境。
以上隐匿了一段代码,用于提示所按键的键码值,在 onKeyDown 重载方法开头部位:

    	String logText = "onKeyDown - keyCode:"+keyCode;
Log.d("Mi", logText);
Toast.makeText(this, logText, Toast.LENGTH_SHORT).show();
pressKeyTextView.setText(logText);

Home 键通过注冊广播监听也是能够接收到了。但怎样能拦截,让系统响应不到,这样在我的应用中按 Home 键,不回到桌面,还是没有解决。

下载了一些其他小米应用商店中的应用。有些确实是无法通过按 Home 回到桌面,尚不知是怎样实现的,须要时能够考虑反编译一下,看看实现方式,当然了。仅是学习的目的。

待续......

Android 小米盒子游戏手柄按键捕获 - 能获取到的 home 键依旧是个痛的更多相关文章

  1. Android Tv 中的按键事件 KeyEvent 分发处理流程

    这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...

  2. Android 7.0 Power 按键处理流程

    Android 7.0  Power 按键处理流程 Power按键的处理逻辑由PhoneWindowManager来完成,本文只关注PhoneWindowManager中与Power键相关的内容,其他 ...

  3. C#的Xamarin开发小米盒子应用并以WCF实现微信通知

    对于熟悉C#语言的开发人员而言,用Xamarin开发Android应用也是一个不错的选择.小米盒子是Android系统.当然也就能够使用Xamarin来开发.首选来看效果图. watermark/2/ ...

  4. 创维(Skyworth)电视 & 小米盒子3增强版

    创维(Skyworth)电视 型号:43G7200(8H87) 品类:GLED Air TV OS:酷开64位6.20.80601-806061  兼容Android L CPU:四核 Cortex ...

  5. Atitit.android js 的键盘按键检测Back键Home键和Menu键事件

    Atitit.android js 的键盘按键检测Back键Home键和Menu键事件 1. onKeyDown @Override public boolean onKeyDown(int keyC ...

  6. 小米盒子连接老式电脑显示器(VGA接口)

    家里闲置一台老式显示器,只有VGA接口,无HDMI高清接口; 小米盒子上有三个输出接口: 一个HDMI高清接口:HDMI接口输出的有音频信号和视频信号,现在买的电视机一般都有HDMI高清接口: 一个A ...

  7. Android常用的物理按键及其触发事件

    Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可:当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用.不过,为了侦听这个 ...

  8. Android tp的虚拟按键(virtual key)处理

    Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的.对Linux熟悉的人可能会说,it's ea ...

  9. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

    Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...

随机推荐

  1. linux log日志解析

    linux log日志解析   其实,可以说成是监控系统的记录,系统一举一动基本会记录下来.这样由于信息非常全面很重要,通常只有 root 可以进行视察!通过登录文件(日志文件)可以根据屏幕上面的错误 ...

  2. P1824 进击的奶牛

    题目描述 Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000 ...

  3. css3 文字溢出 换行实现方案

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. WebAssembly学习(五):AssemblyScript - Hello World

    一.项目创建 1.创建AssemblyScript根目录 mkdir AssemblyScript 2.安装AssemblyScript开发依赖 cnpm install --save-dev Ass ...

  5. Vue数据驱动表单渲染,轻松搞定form表单

    form-create 具有动态渲染.数据收集.校验和提交功能的表单生成器,支持双向数据绑定.事件扩展以及自定义组件,可快速生成包含有省市区三级联动.时间选择.日期选择等17种功能组件. Github ...

  6. @Mapper 和 @MapperScan 区别

    1.@Mapper : 为了使接口被其他类引用,需要使用@Mapper注解,这种方式要求每一个mapper类都需要添加此注解,麻烦. package com.example.demo.dao; imp ...

  7. 【hdu 1429】胜利大逃亡(续)

    [Link]: [Description] 给你一个n*m的格子; 里面有钥匙,以及钥匙能开的门; 以及墙,以及起点,以及出口; 问你从起点出发,到出口的话,能不能在t时间内到; [Solution] ...

  8. Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅

    通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来 Docker 化Dockerize一个 ...

  9. PHP开发常规安全问题总结

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/575 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患,最近须要总结一下 ...

  10. es6 --- Generator 函数

    第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...