按键输入有三种:system key  音量键

global key 按下启动某个APP

user key  ABCD...

给安卓应用程序定义一个广播接收者,写一个BroadcastReceiver的子类:

public class MyBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Get BroadcastReceiver",Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(context, MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}
在.xml文件里定义接收的按键是GlobalKey:
<receiver android:name=".MyBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.intent.action.GLOBAL_BUTTON"/>
</intent-filter>
</receiver>
然后使用am命令发广播:am broadcast -a android.intent.action.GLOBAL_BUTTON -n com.example.zhu.zhu_first/.MyBroadCastReceiver 可以使用按键启动APP:

修改global_keys.xml:

<key keyCode="KEYCODE_TV" component=" com.example.zhu.zhu_first/.MyBroadCastReceiver " />

编译安卓系统生成frameworks-res.apk

放到/system/framework/下面

/system只读,重新挂载:

Mount -o remount,rw /system

Cat /proc/mounts 查看挂载情况

虚拟按键驱动:

#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/hid.h> static struct input_dev *inputdev; static int input_init(void)
{
int i;
inputdev = input_allocate_device(); set_bit(EV_KEY,inputdev->evbit);
set_bit(EV_REP,inputdev->evbit);
for (i = ; i < BITS_TO_LONGS(KEY_CNT); i++)
inputdev->keybit[i] = ~0UL;
inputdev->name = "virtualInput";
inputdev->id.bustype = ;
inputdev->id.product = ;
inputdev->id.version = ;
inputdev->id.vendor = ;
input_register_device(inputdev);
return ;
} static void input_exit(void)
{
input_unregister_device(inputdev);
input_free_device(inputdev);
} module_init(input_init);
module_exit(input_exit); MODULE_LICENSE("GPL");

加载驱动:

然后使用sendevent /dev/input/event5 1 377 1   //按下

sendevent /dev/input/event5 1 377 0       //松开

sendevent /dev/input/event5 0 0 0       //同步

发送AKEYCODE_TV到app

也可以不使用虚拟按键驱动:

直接使用 input keyevent TV   按下AKEYCODE_TV

按键扫描输入与真实输入之间的映射关系通过修改.kl和.kcm两个配置文件来决定

3种配置文件:(通过串口修改安卓系统,然后重启开发板)

1、IDC:input Device configure

/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc

/system/usr/idc/Vendor_XXXX_Product_XXXX.idc

/system/usr/idc/DEVICE_NAME.idc

/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc

/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc

/data/system/devices/idc/DEVICE_NAME.idc

2、Keylayout      //XXXX : 4位16进制

inputdev->id.product = 2;

inputdev->id.version = 1;

inputdev->id.vendor  = 3;

--> Vendor_0003_Product_0002_Version_0001.kl

按照顺序查找这8个配置文件,然后使用。如果没有配置文件,就使用默认的,与linux内核按键值一一对应。创建好配置文件之后一定记住修改访问权限 chmod 777 Vendor_0003_Product_0002_Version_0001.kl

chmod 777 keylayout/

chmod 777 devices/

/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl

/system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl

/system/usr/keylayout/DEVICE_NAME.kl   //input_dev->name

/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl

/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl

/data/system/devices/keylayout/DEVICE_NAME.kl

/system/usr/keylayout/Generic.kl

/data/system/devices/keylayout/Generic.kl

3、KCM: key character map

/system/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm

/system/usr/keychars/Vendor_XXXX_Product_XXXX.kcm

/system/usr/keychars/DEVICE_NAME.kcm

/data/system/devices/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm

/data/system/devices/keychars/Vendor_XXXX_Product_XXXX.kcm

/data/system/devices/keychars/DEVICE_NAME.kcm

/system/usr/keychars/Generic.kcm

/data/system/devices/keychars/Generic.kcm

/system/usr/keychars/Virtual.kcm

/data/system/devices/keychars/Virtual.kcm

使用GlobalKey启动APP的更多相关文章

  1. [Android]从Launcher开始启动App流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...

  2. ActivityManagerService是如何启动app

    ActivityManagerService是如何启动app 一.      上一篇文章app的启动过程,说明了launcher启动app是通过binber,让ActivityManagerServi ...

  3. Appium学习路—脚本篇(启动app)

    启动之前的准备   1.脚本执行前,需要先启动appium的server端, 启动server方法: 打开appium客户端,点击右上角的Launch     2.iOS的测试只能在mac本上做   ...

  4. Android Launcher分析和修改9——Launcher启动APP流程

    本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...

  5. Android 启动APP黑屏解决方案

    #Android 启动APP黑屏解决方案# 1.自定义Theme //1.设置背景图Theme <style name="Theme.AppStartLoad" parent ...

  6. Android在浏览器启动APP

    要想在浏览器启动APP的方法例如以下: 在须要跳转的ACTIVITY中加入intent-filter的相关信息: <intent-filter>     <data android: ...

  7. ele.me在IOS浏览器端启动APP的技巧分析

    ele.me在IOS浏览器端启动APP的技巧分析 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面. 避免报错页面的出现以及用户还没来的及选择就跳转到下载 ...

  8. appium+Python 启动app(二)

    我们上步操作基本完成,下面介绍编写Python脚本启动app 打开我们pycharm新建.py文件 第一步:输入Python脚本代码: #coding=utf-8 from appium import ...

  9. appium+Python 启动app(一)

    当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...

随机推荐

  1. SQL点点滴滴_常用函数

    该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很详细. 以下所有例子均Studnet表为例 ...

  2. Linux文件系统的实现 ZZ

    作者:Vamei 出处:http://www.cnblogs.com/vamei Linux文件管理从用户的层面介绍了Linux管理文件的方式.Linux有一个树状结构来组织文件.树的顶端为根目录(/ ...

  3. Oracle数据库设计实例-实时生产效率系统数据库设计

    Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...

  4. 安装python File "/usr/bin/pip", line 11, in <module> sys.exit(main()) File "/usr/lib/python3.4/site-packages/pip/__init__.py", line 215, in main locale.setlocale(locale.LC_ALL, '') File "/u

      $ uname -a Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU ...

  5. NET对象的跨应用程序域

    NET对象的跨应用程序域 转眼就到了元宵节,匆匆忙忙的脚步是我们在为生活奋斗的写照,新的一年,我们应该努力让自己有不一样的生活和追求.生命不息,奋斗不止.在上篇博文中主要介绍了.NET的AppDoma ...

  6. WAS缓存问题

    在项目中经常遇见这样的问题:修改应用的配置文件web.xml后,无论重启应用还是重启WebSphere服务器,都不能重新加载web.xml,导致修改的内容无效. 这个问题困扰了我好久,即使删除了${w ...

  7. UVa 1625 - Color Length(线性DP + 滚动数组)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. 9.spring:事务管理(下):声明式事务管理

    声明式事务管理 sprin的声明式事务是管理AOP技术实现的事务管理,其本质是是对方法前后进行拦截,然后 在目标方法开始之前创建或者加入一个事务,在执行完成目标方法之后根据执行情况提交或者回滚事务. ...

  9. ssm分页

    pom.xml配置文件中增加相关的插件. <dependency> <groupId>com.github.pagehelper</groupId> <art ...

  10. UVALive4682 XOR Sum

    UVALive4682 XOR Sum 题意 给定一个数组, 求连续子序列中异或值最大的值. 题解 假设答案区间为 [L, R], 则答案为 XOR[L, R], 可以将区间分解为 XOR[L,R] ...