2013-07-26 74 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设备屏幕,就像三星一样。锄头可以这样做吗?请指导。 –