【问题标题】:Temporarily set home for android暂时为android设置home
【发布时间】:2012-11-29 06:54:08
【问题描述】:

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

【问题讨论】:

  • 您不能以编程方式切换主处理程序,但是当您不想接管时,您可以使用明确的意图来真正的处理程序。尽管如此,在普通情况下,这对用户来说要求太多了。
  • 有办法做我所要求的,但我想我有另一个想法。感谢您的意见:)

标签: android android-launcher android-homebutton


【解决方案1】:

为什么要在清单中配置类别 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();  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多