使用GlobalKey启动APP
按键输入有三种: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的更多相关文章
- [Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...
- ActivityManagerService是如何启动app
ActivityManagerService是如何启动app 一. 上一篇文章app的启动过程,说明了launcher启动app是通过binber,让ActivityManagerServi ...
- Appium学习路—脚本篇(启动app)
启动之前的准备 1.脚本执行前,需要先启动appium的server端, 启动server方法: 打开appium客户端,点击右上角的Launch 2.iOS的测试只能在mac本上做 ...
- Android Launcher分析和修改9——Launcher启动APP流程
本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...
- Android 启动APP黑屏解决方案
#Android 启动APP黑屏解决方案# 1.自定义Theme //1.设置背景图Theme <style name="Theme.AppStartLoad" parent ...
- Android在浏览器启动APP
要想在浏览器启动APP的方法例如以下: 在须要跳转的ACTIVITY中加入intent-filter的相关信息: <intent-filter> <data android: ...
- ele.me在IOS浏览器端启动APP的技巧分析
ele.me在IOS浏览器端启动APP的技巧分析 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面. 避免报错页面的出现以及用户还没来的及选择就跳转到下载 ...
- appium+Python 启动app(二)
我们上步操作基本完成,下面介绍编写Python脚本启动app 打开我们pycharm新建.py文件 第一步:输入Python脚本代码: #coding=utf-8 from appium import ...
- appium+Python 启动app(一)
当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...
随机推荐
- linux下查看某个文件属于哪个包
1.centos/redhat下查看某个文件或命令属于哪个rpm包: $ yum provides /etc/passwd 或者 $ rpm -qf /etc/passwd 2.ubuntu及衍生版: ...
- Python学习---协程 1226
协程[是一个单线程],又称微线程,纤程.英文名Coroutine. 一句话说明什么是协程:协程是一种用户态的轻量级线程[程序员自己去切换线程] 协程条件: 必须在只有一个单线程里实现并发 修改共享数据 ...
- php集群和分布式理解
首先架构层次来说: php的集群是指很多台服务器处理同样的工作,指的是硬件上的一般,比如slb负载均衡主要作用是有多台服务器处理同样的工作, php分布式是指多台服务器处理不同的工作,指的是业务上的一 ...
- Ubuntu16.04更换NVIDIA驱动导致无法进入图形界面的解决方案
一.进入recovery模式 由于无法进入图形界面,所以需要在开机时进入恢复模式.我的机器上时在开机时通过引导选项中的recovery mode选项进入,进入之后可以看到许多选项卡,选择root,回车 ...
- Codeforces Round #433 (Div. 2)【A、B、C、D题】
题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...
- bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...
- PyCharm Django项目开发的调试方法
下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...
- 【转】Impala安装json解析udf插件
背景 Impala跟Hive一样,是常用的数据仓库组件之一.熟悉Hive的同学肯定知道,Hive官方提供了get_json_object函数用于处理json字符串,但是Impala官方并没有提供类似的 ...
- Pyplot教程(深度学习入门3)
源地址:http://matplotlib.org/users/pyplot_tutorial.html .caret, .dropup > .btn > .caret { border- ...
- CentOS 7安装简介及基本操作
计算机基本概念: 1.计算机硬件组成: 2.计算机系统结构: 3.操作系统的功能:硬件驱动.进程管理.内存管理.网络管理.安全管理.文件管理等. 4.OS通用目的的软件程序:用户<-->应 ...