Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
一、给自定义按键添加广播
修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
- @Override
- public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
- final boolean keyguardOn = keyguardOn();
- final int keyCode = event.getKeyCode();
- final int repeatCount = event.getRepeatCount();
- final int metaState = event.getMetaState();
- final int flags = event.getFlags();
- final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
- final boolean canceled = event.isCanceled();
- final boolean longPress = (flags & KeyEvent.FLAG_LONG_PRESS) != 0;
- final boolean virtualKey = event.getDeviceId() == KeyCharacterMap.VIRTUAL_KEYBOARD;
- final String isCitKeyTest=SystemProperties.get("persist.sys.startCitKeyTest");
- //添加自定义按键广播----开始
- switch (keyCode)
- {
- case 135:
- case 136:
- case 137:
- case 139:
- {
- if (repeatCount == 0) {
- Intent myKeyIntent = new Intent();
- if(down)
- {
- myKeyIntent.setAction("com.rscja.android.KEY_DOWN");
- }
- else
- {
- myKeyIntent.setAction("com.rscja.android.KEY_UP");
- }
- myKeyIntent.putExtra("keycode", keyCode);
- mContext.sendBroadcastAsUser(myKeyIntent, UserHandle.ALL);
- }
- }
- break;
- }
- //添加自定义按键广播----结束
- ……
- ……
- ……
- ……
- }
二、通过广播给当前焦点输入框赋值
修改InputMethodService.java中的onCreate()方法
/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
- @Override public void onCreate() {
- mTheme = Resources.selectSystemTheme(mTheme,
- getApplicationInfo().targetSdkVersion,
- android.R.style.Theme_InputMethod,
- android.R.style.Theme_Holo_InputMethod,
- android.R.style.Theme_DeviceDefault_InputMethod,
- android.R.style.Theme_DeviceDefault_InputMethod);
- super.setTheme(mTheme);
- super.onCreate();
- mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
- mInflater = (LayoutInflater)getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- mWindow = new SoftInputWindow(this, "InputMethod", mTheme, null, null, mDispatcherState,
- WindowManager.LayoutParams.TYPE_INPUT_METHOD, Gravity.BOTTOM, false);
- if (mHardwareAccelerated) {
- mWindow.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
- }
- initViews();
- mWindow.getWindow().setLayout(MATCH_PARENT, WRAP_CONTENT);
- //注册广播监听
- IntentFilter barCodeCheckFilter = new IntentFilter("com.rscja.android.DATA_RESULT");
- mRootView.getContext().registerReceiver(m_barCodeCheckReciever,barCodeCheckFilter);
- }
- //添加自定义广播
- private BroadcastReceiver m_barCodeCheckReciever = new BroadcastReceiver () {
- @Override
- public void onReceive(Context context, Intent intent) {
- InputConnection conn = getCurrentInputConnection();
- String intent_data=intent.getStringExtra("data");
- if(intent_data.charAt(intent_data.length() - 1)=='\n')
- {
- if (conn != null) {
- conn.commitText(intent_data.substring(0,intent_data.length()-1), 1);
- }
- sendKeyChar('\n');
- }
- else
- {
- if (conn != null) {
- conn.commitText(intent_data, 1);
- }
- }
- }
- };
Android给自定义按键添加广播和通过广播给当前焦点输入框赋值的更多相关文章
- MTK 自定义按键添加广播
一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...
- RK3288 红外遥控器增加自定义按键
转载请注明出处:https://www.cnblogs.com/lialong1st/p/10071557.html CPU:RK3288 系统:Android 5.1 1.在 dts 中增加红外遥控 ...
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- android: 发送自定义广播
5.3.1 发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...
- Android自定义视图三:给自定义视图添加“流畅”的动画
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- Android按键添加和处理的方案
Android按键添加和处理的方案 版本号 说明 作者 日期 1.0 Android按键添加和处理的方案 Sky Wang 2013/06/18 需求:Android机器上有个W ...
- Android按键添加和处理的方案【转】
本文转载自:http://www.cnblogs.com/skywang12345/p/3142851.html Android按键添加和处理的方案 版本号 说明 作者 日期 1.0 Andro ...
- Android学习(十三) BroadcastReceiver组件(广播)
一.Broadcast(广播) 是一种广泛应用在应用程序之间传输信息的机制. 二.Broadcast(广播接收器) 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播 ...
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
随机推荐
- Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
<Windows Azure Platform 系列文章目录> 2014年6月27日消息,在 Microsoft Azure 上提供 SAP Business Suite 软件.All-I ...
- bash魔法堂:History用法详解
Brief 又要敲那条长到没朋友的命令了,真心不再爱了... 有了history这条命令我想大家可以再爱一次了吧! >history 语法: history [n | -c | -raw his ...
- SQL 聚合函数
SQL聚合函数 MAX---最大值 MIN--最小值 AVG--平均值 SUM--求和 COUNT--记录的条数 EXample: --从MyStudent表中查询最大年龄,最小年龄,平均年龄,年龄的 ...
- MVC4在IIS6上部署遇到的问题
最近的一个项目结束了,花的时间一个月左右吧..... 开发环境 win7+VS2012+MVC4(.net 4.0)+SQL SERVER 2008 部署环境 windows server 2003 ...
- 创建html元素
如果我要创建一个div元素. 1.使用DOM对象创建: 使用document.createElement('div')方法创建元素. 2.使用JQuery创建: 使用$('<div>通过J ...
- Redis系列三之持久化
一.Redis持久化 Redis是一个支持持久化的内存数据库,redis需要经常将内存中的数据同步到磁盘来保证持久化. redis提供了不同级别的持久化方法: Snapshotting(快照,默认方式 ...
- 【C#进阶系列】18 特性Attribute
这个东西有的叫定制特性,然而我喜欢直接叫特性,但是这样的话一些人不知道我说的是什么,如果我说是Attribute的话那么知道的或者用过的就都懂了. 还记得讲到枚举和位标志那一章,关于位标志,有一个[F ...
- 用Supervisord管理Python进程
http://feilong.me/2011/03/monitor-processes-with-supervisord Supervisord是用Python实现的一款非常实用的进程管理工具,类似于 ...
- input为disabled提交后得不到该值的解决方法
input的字段当为diabled时时无法获取数值得,所以最近不要用这个,我们可以用readonly带替代,即可解决这类问题 放在form表单中提交后得不到该值. 将disabled=”disable ...
- Array数组基础
数组的定义 数组(array)是按次序排列的一组值,单个值称为元素,它们的位置都有编号(从0开始).整个数组用方括号表示. var arr = ['a', 'b', 'c']; 上面代码中的a.b.c ...