我需要将Honeycomb的“返回”按钮重新映射到我的应用程序(服务)中的一个按钮,但经过几个小时的搜索,我仍然一无所获。功能必须是系统级的,就像ButtonSaviour中的后退按钮(参见市场)。
大多数用于模拟Back按钮的解决方案都是基于调用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。
请让我知道在系统范围内实现此功能的最佳方式,即从服务而不是从我的特定应用程序。
干杯
PS:这个应用程序是为了在我自己的平板电脑上运行,而不是为了分发给其他人。
发布于 2012-03-21 01:56:36
你找不到答案的原因是,这是一种非常老套的方式,它表明你的应用程序的设计中有一些主要的缺陷。您不应该能够“调用后退按钮”,这是没有任何意义的。事实上,你真的不应该改变后退按钮的行为,当你这样做的时候,用户会非常不高兴。如果您有一项服务,并且需要向活动发送消息,则使用messenger。但你肯定不应该(也肯定不能)改变你的服务中其他应用的行为。(这将表明系统中存在一个主要的安全缺陷,并允许您劫持他人的UI,做一些潜在的危险,或者至少是恼人的事情。)
发布于 2012-11-20 17:18:21
当您想要模拟“后退”按钮时,该活动是否会打开?如果是这样的话,你可以在你的活动中设置一个计时器,每隔5秒左右检查一次退出文件。然后,当您想要模拟背部按压时,从您的服务创建退出文件。当活动看到已创建退出文件时,删除该文件并调用finish()。
然而,正如其他人所建议的那样,这样做意味着你可能需要重新考虑应用程序的设计。你到底想要达到什么目的?
发布于 2014-04-26 20:27:54
当问题清楚地表明这将不会用于市场时,为什么人们会用关于设计和良好实践的建议来垃圾邮件?!在一些应用程序中,有时需要更换android导航栏,即使只是为了自己的快乐(或程序员的满意)。
try from java Runtime exec input keyevent 4 4表示返回
按钮救世主很可能使用隐藏的api,我曾经遇到过,但现在不记得了。当我找到它的时候,我会发回来的。
https://stackoverflow.com/questions/9792247
复制相似问题