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

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

 

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

上一篇:https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入后如何添加到自己的项目


下一篇:Android显示系统(1)——显示框架