Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
一、给自定义按键添加广播
修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
1 @Override2 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {3 final boolean keyguardOn = keyguardOn();4 final int keyCode = event.getKeyCode();5 final int repeatCount = event.getRepeatCount();6 final int metaState = event.getMetaState();7 final int flags = event.getFlags();8 final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;9 final boolean canceled = event.isCanceled(); 10 final boolean longPress = (flags & KeyEvent.FLAG_LONG_PRESS) != 0; 11 final boolean virtualKey = event.getDeviceId() == KeyCharacterMap.VIRTUAL_KEYBOARD; 12 final String isCitKeyTest=SystemProperties.get("persist.sys.startCitKeyTest"); 13 14 15 16 //添加自定义按键广播----开始 17 switch (keyCode) 18 { 19 case 135: 20 case 136: 21 case 137: 22 case 139: 23 { 24 if (repeatCount == 0) { 25 26 Intent myKeyIntent = new Intent(); 27 28 29 if(down) 30 { 31 myKeyIntent.setAction("com.rscja.android.KEY_DOWN"); 32 } 33 else 34 { 35 myKeyIntent.setAction("com.rscja.android.KEY_UP"); 36 } 37 38 39 myKeyIntent.putExtra("keycode", keyCode); 40 41 mContext.sendBroadcastAsUser(myKeyIntent, UserHandle.ALL); 42 43 44 45 } 46 } 47 48 49 50 break; 51 } 52 53 //添加自定义按键广播----结束 54 55 56 57 58 …… 59 …… 60 …… 61 …… 62 63 }
二、通过广播给当前焦点输入框赋值
修改InputMethodService.java中的onCreate()方法
/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
1 @Override public void onCreate() {2 mTheme = Resources.selectSystemTheme(mTheme,3 getApplicationInfo().targetSdkVersion,4 android.R.style.Theme_InputMethod,5 android.R.style.Theme_Holo_InputMethod,6 android.R.style.Theme_DeviceDefault_InputMethod,7 android.R.style.Theme_DeviceDefault_InputMethod);8 super.setTheme(mTheme);9 super.onCreate(); 10 mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 11 mInflater = (LayoutInflater)getSystemService( 12 Context.LAYOUT_INFLATER_SERVICE); 13 mWindow = new SoftInputWindow(this, "InputMethod", mTheme, null, null, mDispatcherState, 14 WindowManager.LayoutParams.TYPE_INPUT_METHOD, Gravity.BOTTOM, false); 15 if (mHardwareAccelerated) { 16 mWindow.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 17 } 18 initViews(); 19 mWindow.getWindow().setLayout(MATCH_PARENT, WRAP_CONTENT); 20 21 22 //注册广播监听 23 IntentFilter barCodeCheckFilter = new IntentFilter("com.rscja.android.DATA_RESULT"); 24 mRootView.getContext().registerReceiver(m_barCodeCheckReciever,barCodeCheckFilter); 25 26 } 27 28 29 //添加自定义广播 30 private BroadcastReceiver m_barCodeCheckReciever = new BroadcastReceiver () { 31 32 @Override 33 public void onReceive(Context context, Intent intent) { 34 InputConnection conn = getCurrentInputConnection(); 35 36 String intent_data=intent.getStringExtra("data"); 37 38 39 if(intent_data.charAt(intent_data.length() - 1)=='\n') 40 { 41 if (conn != null) { 42 conn.commitText(intent_data.substring(0,intent_data.length()-1), 1); 43 } 44 sendKeyChar('\n'); 45 } 46 else 47 { 48 if (conn != null) { 49 conn.commitText(intent_data, 1); 50 } 51 } 52 } 53 };
Android给自定义按键添加广播和通过广播给当前焦点输入框赋值相关推荐
- Android 自定义焦点框,Android给自定义按键添加广播和通过广播给当前焦点输入框赋值...
一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...
- android 添加点击声音,Android如何为按键添加声音
为程序的按钮添加按键声音能更好的亲和用户,产生更好的使用体验,下面就是为按键添加声音的方法: public class MainActivity extends Activity { private ...
- android升级功能键,Android 按键添加转载
按键从Linux到Android 现在的普通按键也集成到Linux Input子系统中了,只需要把按键对应的IO端口配置好,按键就可以工作了.所以一般提供的BSP(或者叫作解决方案)中,已经完善了按键 ...
- android: 发送自定义广播
5.3.1 发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...
- android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...
思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...
- android应用中为按键添加声音
为程序的按钮添加按键声音能更好的亲和用户,产生更好的使用体验,下面就是为按键添加声音的方法: [java] view plaincopy public class MainActivity exten ...
- Android O Android P 自定义开机广播
背景 一般来说,我们都是用的监听android.intent.action.BOOT_COMPLETED. 但凡稍有些经验的开发者都知道,这个广播很慢,非常慢.因为它是一个有序广播,根据优先级来的,而 ...
- Android动画效果之自定义ViewGroup添加布局动画
Android动画效果之自定义ViewGroup添加布局动画 前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢 ...
- Android蓝牙增加自定义按键
Android蓝牙增加自定义按键 方式1 方式2 公司设备需要增加蓝牙手柄,直接使用可以连接但按键事件没反应,一番研究发现得增加自定义的按键. 说明: Android版本:6.0 蓝牙-设备协议:AV ...
最新文章
- linux单步跟踪命令,dbx调试跟踪的常用子命令
- 河池学院计算机与信息工程学院官网 领导,关于成立我院宣传工作领导小组的方案...
- MapReduce执行过程
- mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
- Qt 程序打包发布总结
- matlab 流固耦合,详讲流固耦合
- python从26个字母中随机挑选5个_【习题之Python篇】习题6
- 普通地图的六大要素_地理知识点总结之地图基本要素
- Centos7下,LVM根分区扩容
- Max and Min---递归
- bt种子简介与magnet磁力介绍
- B+树索引实战:全值匹配查询
- 数据治理系列:数据血缘关系
- 微信小程序-文字跑马灯
- 爬虫(21)crawlspider讲解古诗文案例补充+小程序社区案例+汽车之家案例+scrapy内置的下载文件的方法
- linux pv 文件夹,Linux 实用命令 - pv
- 在线绘制流程图网站、思维导图网站总结
- mysql5.1为什么programdata文件夹里只有frm文件
- 文献阅读---玉米干旱响应和耐受性基因表达的调控变异定位
- 最全电商分类信息(07)