1

我有一个使用 CATEGORY_HOME 的应用程序,因此当您按下主页按钮时,它会将您留在我的应用程序中。在用户选择我的应用程序作为默认主页后,它将为整个设备设置。

我想知道当您按下主页按钮时,当您不在我的应用程序中时,您如何禁用我的应用程序中的主页。在做了一些研究之后,我认为我需要使用包管理器,但我不知道如何实现它。

活动在 Manifest 中定义为 home:

<activity
        android:name=".home"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

这是我去家的方式和设置方式:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
4

1 回答 1

2

为什么要在清单中配置类别 HOME ?您可以通过覆盖来覆盖主页按下行为:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_HOME)) {
        Toast.makeText(this, "Home button pressed!", Toast.LENGTH_LONG).show();                     
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

然后在按下应用程序内的按钮时做任何你正在做的事情。在应用程序之外它当然会正常工作。

编辑

刚刚检查过,在我的设备上不起作用,但似乎如果您覆盖onAttachedWindow()并禁用 HOME,它可能会起作用。请记住使用重新分配密钥onKeyDown()(就像在此编辑上方发布的一样)。

@Override
public void onAttachedToWindow() {  
    getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();  
}
于 2012-12-03T22:49:23.273 回答