在类别为HOME的活动中覆盖Home键长按功能

9

我刚刚创建了自己的“主页”,来替换原生的安卓或Sense。

所有功能都正常,我得到了我想要的一切。我唯一的问题是如何用我的启动器替换长按主页键(通常显示您最近启动的6个活动)。

我成功地用这段代码替换了长按菜单按钮:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

//Log.i(TAG,"Keycode: "+keyCode);

if (keyCode == KeyEvent.KEYCODE_MENU) {
    // this tells the framework to start tracking for
    // a long press and eventual key up. it will only
    // do so if this is the first down (not a repeat).

    event.startTracking();
    return true;
}
(...)

并且这部分是用于长按的:

  @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {

        //Log.i(TAG,"LONG"+keyCode);
        Toast.makeText(Launcher.this,"LONG "+keyCode, Toast.LENGTH_SHORT).show();

        if (keyCode == KeyEvent.KEYCODE_MENU) {
        (...)

但问题是我无法将KeyEvent.KEYCODE_MENU替换为KeyEvent.KEYCODE_HOME

是否有代码锁定了用户使用Home键长按的功能?

非常感谢您提供的所有信息。

3个回答

8

我所看到的所有内容都表明这是不可能完成的... 这里有一篇关于Android初学者的帖子,我在那里问了一个非常类似的问题:

http://groups.google.com/group/android-beginners/browse_thread/thread/d8cdcd1c52d79ef1/0f4b184da6f248a9?lnk=gst&q=home+key#0f4b184da6f248a9

然而,最近我发现了一个可以通过双击主页键启动的应用程序,所以一定有办法解决。我尝试了一段时间但无法使其工作。现在我知道别人已经解决了这个问题,我将再次尝试它....
编辑 虽然不能覆盖长按主页按钮,但我找到了一种成功实现双击主页按钮的方法。其一般思路如下: 1. 让你的应用程序充当主页替换应用程序(查看SDK示例中的示例主页应用程序)。 2. 允许在应用程序中指定要使用的主页应用程序(向用户显示主页替换应用程序列表非常简单)。 3. 在第一次按下主页按钮时启动计时器。 4. 如果计时器超时,则启动主页应用程序。 5. 如果用户在计时器停止之前第二次按下主页键,则启动您的应用程序。
基本上,主页替换活动除了启动由用户指定的真正主页应用程序或启动您的应用程序之外,什么都不会显示。
我发现这很有效,实际上我在Android市场上发布了一个应用程序来完成这个功能。如果你想看它的效果,它被称为“Quick Launch”,发布者名称为“MagouyaWare”。
希望这可以帮到你!

所以你发现了新东西吗?是哪个应用程序? - Alexander Stolz

5

您可以在清单文件中加入以下内容,模拟长按HOME键的操作:

<intent-filter>
    ...
    <action android:name="android.intent.action.ASSIST" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

太好了!它在三星Galaxy View上运行良好。它与<category android:name="android.intent.category.HOME" />相同。我希望在长按任务按钮时也能有同样的效果... - kmas

-1

我找到了解决HOME键的方法。对于您的应用程序,请将清单设置为

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>

现在你的应用程序是一个备选启动器应用程序。

使用adb,并使用包管理器禁用启动器应用程序

pm disable com.android.launcher2.

现在,按下Home键将始终停留在同一屏幕。

实际上,代码并不多。如果有帮助的话,我会尝试解释一下。 对于Android应用程序,在清单文件中,我们通常将意图过滤器保持为:

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 

相反,我们应该让意图过滤器看起来像这样:

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.HOME" /> 
<category android:name="android.intent.category.DEFAULT" />               
<category android:name="android.intent.category.MONKEY"/>

这是与Launcher相同的意图过滤器。

现在我们有一个备用启动器应用程序。要使它成为唯一的启动器应用程序,我们必须卸载/禁用现有的启动器应用程序(Android中的默认启动器)。

为此,我们需要连接设备/模拟器并启动adb(Android调试桥)。然后按照以下步骤操作:

adb shell
# pm list packages //This will list all the packages installed
#pm disable com.android.launcher //This will disable the launcher application.

重新启动。


你可以在你的博客中写一个指南,并提供这个链接吗?我发现你在许多链接中都给出了答案,我认为你可以帮助很多人,包括我。谢谢。 - pengwang
我给这个负面评价是因为它没有回答原问题。原问题是如何替换长按主页键的功能。这是不可能的。此外,我强烈建议不要禁用默认主页应用程序。仅仅因为它可以被做到并不意味着它应该被做到。实现amiekuser建议的最佳方法是使用内置的Android方法设置默认应用程序。如果您有多个主页替换应用程序并按下主页键,则会出现一个对话框询问您要使用哪个应用程序(并允许您将其设置为默认)。 - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接