覆盖Home键长按类别.HOME活动

时间:2010-05-29 08:28:43

标签: android android-homebutton

我刚刚创建了自己的“Home”来替换股票android或Sense。

一切正常,我得到了我想要的一切。我唯一的问题是用我自己的发射器替换长按主页键(通常显示你发起的最后6个活动)。

我用以下代码成功替换长按MENU按钮:

@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_HOME替换KeyEvent.KEYCODE_MENU

是代码中锁定的内容,以避免用户使用Home长按?

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

3 个答案:

答案 0 :(得分: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. 如果用户在计时器停止前第二次按下主页键,则启动应用程序
  6. 基本上,家庭替换活动只会启动用户指定的真实家庭应用程序或启动您的应用程序......它永远不会显示自己的用户界面。

    我发现这非常有效,并且实际上在Android电子市场上发布了一个应用程序。如果你想看到它的实际效果,它被称为“快速启动”,出版商名称被列为“MagouyaWare”

    希望这有帮助!

答案 1 :(得分:3)

您可以为长按HOME按钮

注册假活动

添加到清单:

send: function() {
    var document = {
        DocumentName: this.fsEntry.file.name
    };

    var formdata = new FormData();
    formdata.append('file', this.fsEntry.file);
    formdata.append('metadata', JSON.stringify(document));

    this.xhr = new XMLHttpRequest();
    this.xhr.addEventListener("loadstart", this.onLoadStart, false);
    this.xhr.upload.addEventListener("progress", this.onProgress, false);
    this.xhr.addEventListener("load", this.onComplete, false);
    this.xhr.open("POST", this.fsEntry.uploadUri, true);
    this.xhr.send(formdata);
}

this.onProgress = function(e) {
    if (e.lengthComputable) {
        console.log("progress: uploaded " + e.loaded + " of " + e.total);
    }
}  

答案 2 :(得分:0)

我找到了解决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"/> Now ur application is an alternate Launcher application.

使用adb,并使用包管理器

禁用启动器应用程序

pm禁用com.android.launcher2。

现在Home键按下将保持在同一个屏幕上。

实际上代码不多。如果有帮助,我会尝试解释它。 对于清单文件中的andriod应用程序,我们通常将intent过滤器保持为: -

 

Instaed我们应该使intent过滤器看起来像: -

 

这与LAuncher的意图过滤器相同。

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

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

adb shell

pm list packages //这将列出所有已安装的软件包

pm disable com.android.launcher //这将禁用启动器应用程序。

重新启动。