2013-07-26 101 views
0

我正在爲我的小孩創建一個應用程序,因爲她喜歡手機,但弄亂了我的桌面。我使用NDK做我的應用程序,我有以下....防止主頁按鈕按Android NDK

static int32_t handle_input(struct android_app* app, AInputEvent* event) { 
    if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_KEY) 
    { 
    int key_val = AKeyEvent_getKeyCode(event); 
    switch(key_val){ 
     case AKEYCODE_BACK: 
     LOGI("Back Button hit"); 
     break; 
     case AKEYCODE_HOME: 
     LOGI("HOME HIT"); 
     break; 
    } 
    LOGI("Input Recieved %d", key_val); 
    } 
    return 1; 
} 

但是,當我點擊後退按鈕,然後按home鍵,我看到了

I/native-activity(24450): Back Button hit 
I/native-activity(24450): Input Recieved 4 
I/native-activity(24450): Back Button hit 
I/native-activity(24450): Input Recieved 4 
I/ActivityManager( 278): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher} from pid 278 

是否有許可或我可以給它的東西,讓我趕上主頁按鈕按?好像應該有按照本測試類...

TEST_F(KeyboardInputMapperTest, Process_SimpleKeyPress) { 
    const int32_t USAGE_A = 0x070004; 
    const int32_t USAGE_UNKNOWN = 0x07ffff; 
    mFakeEventHub->addKey(DEVICE_ID, KEY_HOME, 0, AKEYCODE_HOME, POLICY_FLAG_WAKE); 
+0

你生根了嗎?有了root權限,我可以爲你寫點東西。 – NightSkyCode

+0

我試圖在沒有root的情況下做到這一點,但是,我的模擬器已經紮根,所以我可以將它POC在那裏。它會涉及編輯InputDispatcher.cpp? – Jackie

+0

你說得對。然而,沒有根,現在有辦法做到這一點..你將不得不想到我認爲聰明的東西。 – NightSkyCode

回答

1

如果您正在使用的Java SDK或NDK開發不要緊。 HOME按鈕的重要事件不會發送到您的應用程序。這是設計時,HOME按鈕是Android設備上的通用功能,應用程序不應該能夠修改其行爲。

+0

然而,我從專業角度聽到你的理論(這就是我所指的),我不確定是這種情況。我確實認爲最後的評論是正確的,我可能不得不重寫InputDispatcher.cpp或類似的東西。 – Jackie

+0

你絕對正確。將這些數據導入應用程序需要定製Android和框架本身。 – Devunwired

+0

先生,我想知道是否有可能在按Home按鈕時切換我的Android設備屏幕,就像三星一樣。鋤頭可以這樣做嗎?請指導。 –