来自Android服务的回叫按钮(全系统)

时间:2012-03-20 17:49:12

标签: android android-intent

我需要将Honeycomb“Back”按钮重新映射到我的应用程序(服务)中的按钮,但经过数小时的搜索,我仍然无处可去。功能必须在系统方面,如ButtonSaviour中的后退按钮(参见市场)

用于模拟“后退”按钮的大多数解决方案都基于调用finish()。不确定它是否适用于我的情况,因为我必须从前台找到的任何活动调用finish()。我设法使用代码

获取前台应用程序
ActivityManager am = (ActivityManager) getContext().getSystemService(getContext().ACTIVITY_SERVICE);
        List<RunningTaskInfo> T = am.getRunningTasks(5);
        System.out.println("top activity: "+T.get(0).topActivity);

但是我不确定我应该如何发送一个finish()意图..

我也试过这里发布的解决方案http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html,但是我无法绕过IWindowManager(在Honeycomb中删除它了吗?)。然而,该解决方案看起来很有趣,因为我可以随时随地发送KeyEvent.KEYCODE_BACK。

请告诉我实施此功能SYSTEM-WIDE的最佳方法,即从服务而非我的特定应用程序。

欢呼声

PS:该应用程序应该在我自己的root平板电脑上运行,而不是分发给其他人。

3 个答案:

答案 0 :(得分:0)

你没有找到答案的原因是,这是一种非常黑客的做事方式,它表明你的应用程序设计存在重大缺陷。你不应该“调用后退按钮”,这根本没有任何意义。事实上,你根本不应该改变后退按钮的行为,当你这样做时,用户会感到非常沮丧。如果您有服务,并且需要向活动发送消息,请使用信使。但是你当然不应该(当然也不能)改变你服务中其他应用程序的行为。 (这表明系统存在重大安全漏洞,并且会让你劫持其他人的UI,做有潜在危险或至少令人烦恼的事情。)

答案 1 :(得分:0)

当您想要模拟后退按钮时,活动是否会打开?如果是这样,您可以在活动中设置一个计时器,每隔5秒左右检查一次退出文件。然后,从您的服务中,在您要模拟背压时创建退出文件。当活动看到创建了退出文件时,删除该文件并调用finish()。

正如其他人所建议的那样,以这种方式做事意味着您可能需要重新考虑应用程序的设计。你究竟想要实现什么目标?

答案 2 :(得分:0)

当问题清楚地表明这不会用于市场时,为什么人们会通过关于设计和良好做法的建议来垃圾邮件?!  在某些应用程序中,有时需要更换android导航栏,即使只是为了自己的乐趣(或程序员满意度)。

从java Runtime exec尝试 输入keyevent 4 4意味着回来

按钮救世主最有可能使用隐藏的api,我遇到了一些,但现在不记得了。当我找到它时,我会回复。