一、给自定义按键添加广播

修改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给自定义按键添加广播和通过广播给当前焦点输入框赋值相关推荐

  1. Android 自定义焦点框,Android给自定义按键添加广播和通过广播给当前焦点输入框赋值...

    一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...

  2. android 添加点击声音,Android如何为按键添加声音

    为程序的按钮添加按键声音能更好的亲和用户,产生更好的使用体验,下面就是为按键添加声音的方法: public class MainActivity extends Activity { private ...

  3. android升级功能键,Android 按键添加转载

    按键从Linux到Android 现在的普通按键也集成到Linux Input子系统中了,只需要把按键对应的IO端口配置好,按键就可以工作了.所以一般提供的BSP(或者叫作解决方案)中,已经完善了按键 ...

  4. android: 发送自定义广播

    5.3.1    发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...

  5. android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...

    思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...

  6. android应用中为按键添加声音

    为程序的按钮添加按键声音能更好的亲和用户,产生更好的使用体验,下面就是为按键添加声音的方法: [java] view plaincopy public class MainActivity exten ...

  7. Android O Android P 自定义开机广播

    背景 一般来说,我们都是用的监听android.intent.action.BOOT_COMPLETED. 但凡稍有些经验的开发者都知道,这个广播很慢,非常慢.因为它是一个有序广播,根据优先级来的,而 ...

  8. Android动画效果之自定义ViewGroup添加布局动画

    Android动画效果之自定义ViewGroup添加布局动画 前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢 ...

  9. Android蓝牙增加自定义按键

    Android蓝牙增加自定义按键 方式1 方式2 公司设备需要增加蓝牙手柄,直接使用可以连接但按键事件没反应,一番研究发现得增加自定义的按键. 说明: Android版本:6.0 蓝牙-设备协议:AV ...

最新文章

  1. linux单步跟踪命令,dbx调试跟踪的常用子命令
  2. 河池学院计算机与信息工程学院官网 领导,关于成立我院宣传工作领导小组的方案...
  3. MapReduce执行过程
  4. mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
  5. Qt 程序打包发布总结
  6. matlab 流固耦合,详讲流固耦合
  7. python从26个字母中随机挑选5个_【习题之Python篇】习题6
  8. 普通地图的六大要素_地理知识点总结之地图基本要素
  9. Centos7下,LVM根分区扩容
  10. Max and Min---递归
  11. bt种子简介与magnet磁力介绍
  12. B+树索引实战:全值匹配查询
  13. 数据治理系列:数据血缘关系
  14. 微信小程序-文字跑马灯
  15. 爬虫(21)crawlspider讲解古诗文案例补充+小程序社区案例+汽车之家案例+scrapy内置的下载文件的方法
  16. linux pv 文件夹,Linux 实用命令 - pv
  17. 在线绘制流程图网站、思维导图网站总结
  18. mysql5.1为什么programdata文件夹里只有frm文件
  19. 文献阅读---玉米干旱响应和耐受性基因表达的调控变异定位
  20. 最全电商分类信息(07)

热门文章

  1. mysql中以下正确的sql是_总结MySQL中SQL语法的使用
  2. 007_Redis的Set数据类型
  3. Java解码vhd的磁盘文件,VHD Java library
  4. java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
  5. Java数据类型转换全解
  6. 刷题之旅2020.12.05
  7. IDEA2018软件安装教程
  8. python列表中包含元祖_python列表与元祖
  9. linux 关闭磁盘检测,linux下检测磁盘状态
  10. python固定数据类型_Python的数据类型