Skip to main content
 首页 » 编程设计

Android输入系统(5)——一键启动App测试

2022年07月19日23qlqwjy

1. App接收者注册

动态注册:手工执行代码去注册,
缺点:程序退出之后,接收者就不起作用了,就接收不到消息了。

静态注册:
在AndroidManifest.xml中添加如下:

<application> 
    /*add: */ 
    <receiver android:name=".MyBroadcastReceiver">    //“.类名”,当收到消息后其onReceive()被调用。 
        <intent-filter> 
            <action android:name="android.intent.action.GLOBAL_BUTTON"/> 
        </intent-filter> 
    </receiver> 
</application>

我们的目的是按下一个键就能启动App,就需要接收者要常驻系统,因此需要静态注册。

2. 复写onReceive()

新建MyBroadcastReceiver.java:

public class MyBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
        Toast.makeText(context, "Get BroadcastReceiver", Toast.LENGTH_SHORT).show(); 
 
        /*启动当前组件*/ 
        Intent intentNewTask = new Intent(context, MainActivity.class); 
        intentNewTask.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(intentNewTask); 
    } 
}

3. 手工发广播给这个App测试

# am broadcast -a android.intent.action.GLOBAL_BUTTON -n com.example.mm.input_demo_01/.MyBroadcastReceiver

4. 实现按键发送广播给App

修改global_keys.xml文件内容如下:

<global_keys version="1"> 
    <key keyCode="KEYCODE_TV" component="com.example.mm.input_demo_01/.MyBroadcastReceiver" /> 
</global_keys>


表示输入系统收到KEYCODE_TV时,向组件com.example.mm.input_demo_01的类MyBroadcastReceiver( MyBroadcastReceiver extends BroadcastReceiver)
发送消息,其重写的onReceive()被调用,在这函数中启动了本App.

将编译生成的新的framework-res.apk拷贝到开发板上:
# adb push ../../../../out/target/product/tiny4412/system/framework/framework-res.apk /system/framework/

5. 测试

若不使用特定于驱动名的.kl文件 
# cat /system/usr/keylayout/Generic.kl | grep TV                 
key 377   TV 
 
# insmod InputEmulator.ko 
Linux内核上报扫描码337启动App 
sendevent /dev/input/event5 1 377 1; 
sendevent /dev/input/event5 1 377 0; 
sendevent /dev/input/event5 0 0 0; 
 
或直接使用input工具发送 
# input keyevent TV    //同样可以启动应用程序,注意这里input使用的是Android中的转换后的AKEYCODE_TV,不是Linux内核上报的扫描码。

6. am broadcast -a <ACTION>发送哪个类型的广播消息,-n <COMPONENT>发给谁。

7. am命令博客:https://blog.csdn.net/zuolongsnail/article/details/8167501


本文参考链接:https://www.cnblogs.com/hellokitty2/p/10884394.html