1. 一鍵啟動的過程

1.1 對于global key, 系統(tǒng)會根據(jù)global_keys.xml發(fā)送消息給某個組件

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

1.2 APP應(yīng)該注冊廣播消息的接收者

1.2.1 編寫B(tài)roadcastReceiver派生類, 實現(xiàn)消息處理函數(shù)
package com.thisway.app_0001_leddemo;//注意包名,可以是自己的報名,但是后面的實驗當(dāng)中的操作需要根據(jù)包名修改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,添加下列代碼,實現(xiàn)靜態(tài)注冊
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.GLOBAL_BUTTON"/>
    </intent-filter></receiver>

1.3 然后在該組件中啟動app

2. 具體操作流程

2.1 手工發(fā)廣播

將編寫好的安卓應(yīng)用程序下載到Tiny4412開發(fā)板后,關(guān)閉該應(yīng)用程序進(jìn)程,在串口終端執(zhí)行如下命令,程序被喚醒。
am broadcast -a android.intent.action.GLOBAL_BUTTON -n com.thisway.app_0001_leddemo/.MyBroadcastReceiver

2.2 用按鍵觸發(fā)

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,執(zhí)行如下命令,生成 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, 才能復(fù)制,故執(zhí)行如下命令,再進(jìn)行復(fù)制操作
su
mount -o remount,rw /system
2.2.4 修改驅(qū)動程序?qū)?yīng)的kl文件(對于TV鍵不需要修改, scancode 377就對應(yīng)TV鍵),執(zhí)行下列操作
cp /system/usr/keylayout/Generic.kl /data/system/devices/keylayout/
mv Generic.kl InputEmulatorFromLKQ_net.kl
2.3.5 重啟開發(fā)板,并裝載模擬驅(qū)動
rebootinsmod /data/local/InputEmulator.ko
2.3.6 模擬上報按鍵,APP被喚醒
sendevent /dev/input/event5 1 377 1sendevent /dev/input/event5 1 377 0sendevent /dev/input/event5 0 0 0

2.3 不使用驅(qū)動而使用以下命令模擬按鍵,可以喚醒APP

input keyevent TV

3. 總結(jié)

本次博文主要實現(xiàn)一鍵啟動APP過程,如果需要真實按鍵,則需要自己編寫一個按鍵驅(qū)動程序。下次博文將對APP跟輸入系統(tǒng)建立聯(lián)系的過程進(jìn)行具體分析。

http://www.cnblogs.com/lkq1220/p/7183043.html