Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序

Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序

1. 一键启动的过程

1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件

<key keyCode="KEYCODE_TV" component="com.thisway.app_0001_leddemo/.MyBroadcastReceiver" />

1.2 APP应该注册广播消息的接收者

1.2.1 编写BroadcastReceiver派生类, 实现消息处理函数
package com.thisway.app_0001_leddemo;
//注意包名,可以是自己的报名,但是后面的实验当中的操作需要根据包名修改

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
* Created by alienware on 2017/5/12.
*/
public class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "myReceiver receive", Toast.LENGTH_SHORT).show();

        Intent intentNewTask=new Intent(context,MainActivity.class);
        intentNewTask.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intentNewTask);

    }
}
1.2.2 注册派生类: 修改 AndroidManifest.xml,添加下列代码,实现静态注册
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.GLOBAL_BUTTON"/>
    </intent-filter>
</receiver>

1.3 然后在该组件中启动app

2. 具体操作流程

2.1 手工发广播

将编写好的安卓应用程序下载到Tiny4412开发板后,关闭该应用程序进程,在串口终端执行如下命令,程序被唤醒。
am broadcast -a android.intent.action.GLOBAL_BUTTON -n com.thisway.app_0001_leddemo/.MyBroadcastReceiver

2.2 用按键触发

2.2.1 修改 /work/android-5.0.2/frameworks/base/core/res/res/xml/global_keys.xml,在该文件添加如下代码
添加:
<key keyCode="KEYCODE_TV" component="com.thisway.app_0001_leddemo/.MyBroadcastReceiver" />
2.2.2 在Ubuntu下编译AndroidSDK,执行如下命令,生成 framework-res.apk ( out/target/product/tiny4412/system/framework/framework-res.apk)
mmm frameworks/base/core/res
2.2.3 把生成的framework-res.apk通过adb push放到单板目录上/system/framework/;注明:先以rw方式remount /system, 才能复制,故执行如下命令,再进行复制操作
su
mount -o remount,rw /system
2.2.4 修改驱动程序对应的kl文件(对于TV键不需要修改, scancode 377就对应TV键),执行下列操作
cp /system/usr/keylayout/Generic.kl /data/system/devices/keylayout/
mv Generic.kl InputEmulatorFromLKQ_net.kl
2.3.5 重启开发板,并装载模拟驱动
reboot
insmod /data/local/InputEmulator.ko
2.3.6 模拟上报按键,APP被唤醒
sendevent /dev/input/event5 1 377 1
sendevent /dev/input/event5 1 377 0
sendevent /dev/input/event5 0 0 0

2.3 不使用驱动而使用以下命令模拟按键,可以唤醒APP

input keyevent TV

3. 总结

本次博文主要实现一键启动APP过程,如果需要真实按键,则需要自己编写一个按键驱动程序。下次博文将对APP跟输入系统建立联系的过程进行具体分析。
posted @ 2017-07-15 16:06  lkq1220  阅读(1939)  评论(0编辑  收藏  举报