• 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跟输入系统建立联系的过程进行具体分析。
  • 相关阅读:
    BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]
    BZOJ 1119: [POI2009]SLO [置换群]
    POJ 2154 Color [Polya 数论]
    POJ 2409 Let it Bead [置换群 Polya]
    POJ置换群入门[3/3]
    [置换群&Polya计数]【学习笔记】
    查看linux中的TCP连接数
    SIT测试 和 UAT测试
    原生app是什么意思?
    线程池原理
  • 原文地址:https://www.cnblogs.com/lkq1220/p/7183043.html
Copyright © 2020-2023  润新知