2010-02-09 41 views
1

我需要我的活动以编程方式用 接收器处理HOME按钮按下,但事件未触发。但是,如果我在清单文件活动部分中将其声明为 ,我可以, 成功注册并捕获此意图过滤器。下面是 的代码,不工作的接收器:以编程方式捕捉HOME意图

BroadcastReceiver br; 

br = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
       return; // I put a breakpoint here to see if this gets called 
     } 
}; 


IntentFilter intf = new IntentFilter(); 
intf.addAction(Intent.ACTION_MAIN); 
intf.addCategory(Intent.CATEGORY_HOME); 
intf.addCategory(Intent.CATEGORY_DEFAULT); 

registerReceiver(br, intf); 

有谁知道为什么这个不能捕获home键点击?

顺便说一句,我试着通过创建另一个活动 并在清单中指定其意图过滤器来解决此问题。我在清单中设置了启用=“false”的活动 ,但我无法弄清楚如何在运行时启用该活动。底线,我只想 注册我的应用程序的主页按钮意图过滤器只有当我的 应用程序正在运行,我不知道如何做到这一点。

回答

3

如果您尝试实施替换主屏幕,则需要将Intent过滤器放在清单中 - 请参阅SDK中的Home示例应用程序。

如果您试图阻止HOME键,请不要。

+0

是的,它在清单中工作,但我想在运行时以编程方式打开/关闭它。 谢谢你的礼貌:) – Alex 2010-02-09 16:17:47

+0

是的,不幸的是,我不认为这是有效的。但是,我错过了部分问题:“我在清单中将活动设置为enabled =”false“,但我无法弄清楚如何在运行时启用该活动。” - 你应该可以用'PackageManager'的'setComponentEnabledSetting()'方法做到这一点。 – CommonsWare 2010-02-09 16:29:42

+0

谢谢,我认为它的工作原理! – Alex 2010-02-09 17:17:44

0

永远不应该有一种情况,您应该重写home键,以确保用户始终保持对手机的控制权。你究竟想要做什么?如果你想检测你的活动何时不再可见,你应该重写onStop()。

+0

我想添加我的操作作为主页按钮单击的合法第二个来源,如果我将意图过滤器放入manifest.xml操作部分,我可以轻松地做到这一点。我唯一想要做的不同是我想要这个功能ON DEMAND,因为将过滤器放入manifest.xml动作中,只要应用程序已安装,就会为我的按钮单击操作注册,而我不希望它执行此操作那。 – Alex 2010-02-09 16:14:27

+0

市场上的幼儿锁是合法覆盖主页按钮的应用程序的一个很好的例子。 – 2010-02-10 04:00:59

相关问题