覆盖主页按钮 - 如何摆脱选择?

时间:2010-01-17 01:53:04

标签: android

创建一个Intent以便MyActivity对用户做出反应时按下Home标签很容易使用XML标记:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

我想知道如何避免在主屏幕上选择“您想要使用哪些活动”? HTC已经使其“Touch Flo”(Sense)覆盖默认的“开始”活动,如果我想通常使用“开始”或“TouchFlo”,我永远不会得到问题。但是,当我添加自己的Activity时,我总是得到问题。

是的,我知道我可以查看“将此作为标准使用” - 检查框,但这不是我现在想要的。因此,问题是:我可以使系统覆盖其他所有内容并始终将MyActivity用作默认值吗?

接下来,我真的只想在我的应用运行时覆盖正常的主屏幕。如果它没有运行,一切都应该正常工作,即MyActivity不应该与Home按钮相关联。

任何想法都会很棒。

5 个答案:

答案 0 :(得分:28)

如果没有用户确认,您无法永久覆盖主页按钮。

为什么会出现这种情况的一个论点是安全问题。 Home按钮是用户可以保证退出任何应用程序的一种方式。如果您可以在没有用户确认此更改的情况下使主页按钮启动您的应用程序而不是主屏幕,那么编写劫持用户手机的恶意应用程序将非常容易。

或者,您的应用程序可能包含一个复制主屏幕,用于收集用户的Google帐户详细信息;不是那么难,因为源可用。如果你的应用程序可以默默地替换默认的主屏幕,那么用户很难说这已经发生了。

另外,你真的想覆盖Home吗?家就像一个紧急逃生按钮。按Home两次将始终将用户带回主屏幕的中央面板,因此无论他们运行什么应用程序,用户都可以轻松回到他们知道的某个地方。除非你正在制作一个完整的Home替代品,否则你不应该真的重写这个。

答案 1 :(得分:5)

@Override
public void onAttachedToWindow()
{  
    Log.i("TESTE", "onAttachedToWindow");
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();  
}

使用此方法,HOME按钮将停止在此活动中工作(仅限此活动)。然后你重新实现,因为这是一个普通的按钮事件(例如后退按钮)。

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME) {
    Log.i("TESTE", "BOTAO HOME");
    return true;
}
return super.onKeyDown(keyCode, event);    
}

答案 2 :(得分:1)

嗯,用户仍然必须选择常规家庭作为他们的家庭,并使用默认选中以停止提示返回。但是,我相信您可能会以某种方式修改系统设置,以便将您的特定活动视为默认主页,这样按下主页将无效或在主要活动中显示锁定用户,我知道你希望从那里开始你的用户进入其他活动,让他们快速回家按回到这个根启动器。我完全可以看到这个好处,如果我选择实现用户可以左右翻转的多个小部件屏幕,它甚至可能有益于我正在开发的内容。

我已经下载了至少一个应用程序,似乎正在执行此操作。当用户退出应用程序时,它将恢复用户的常规默认主页首选项。该应用程序非常明确地指示用户选择Launcher作为其默认主页,并且永远不会使用应用程序本身。它有一些不同的“退出”方法,如果用户有多个,则可以选择返回哪个家,以及退出常规默认的家。

我也正在研究这个问题,并将报告进展情况&amp;源。

答案 3 :(得分:1)

OnUserLeaveHint()可以抓住用户按下主页按钮。

自API级别3以来一直存在。

@Override
protected void onUserLeaveHint() {
    super.onUserLeaveHint();
    /*
     * Called as part of the activity lifecycle when an activity is about to go into the background 
     * as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, 
     * but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, 
     * onUserLeaveHint() will not be called on the activity being interrupted. 
     * In cases when it is invoked, this method is called right before the activity's onPause() callback. 
     */
}

来源:https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

答案 4 :(得分:0)

使用onUserLeaveHint()

onUserLeaveHint()是一个受保护的方法,作为活动的其他生命周期方法,如果您正在处理onUserLeaveHint,这将处理以下情况

  1. 当用户点击主页键时
  2. 当用户点击密钥
  3. 当用户点击信号器栏
  4. 在这里你可以点击Homeb按钮。

    古德勒克。 :)