暂时为Android设置主页

时间:2012-11-29 06:54:08

标签: android android-launcher android-homebutton

我有一个使用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);

1 个答案:

答案 0 :(得分: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();  
}