我正在为Android编写基于GPS的应用程序。我想要一个按钮退出应用程序,这将关闭GPS,但我不想回到arrorw或home关闭进程。
我已阅读This帖子和许多其他人,他们很好地解释了为什么我不想做我想做的事情。问题是,如果我只是退出应用程序的箭头,则有后台进程并且GPS仍在运行。我知道我可以使用OnStop()或OnPause()来关闭它们,但我不希望后退箭头或主页停止任何操作。我希望无论用户做什么,所有GPS和处理程序都会继续运行,除非他在我的主屏幕上点击退出,这会将他带到另一个屏幕,即确认退出并进行清理。这样,如果错误地击中箭头,用户可以将箭头退出退出屏幕,而不会实际退出。
请注意,此应用程序将在有手套的不利条件下在明亮的阳光下使用。读取任何内容都非常困难,因此我使用高对比度字体100。除非用户真的希望它停止,否则它无法停止。但只是让它运行会杀死电池。如果我只是让它运行,我对系统的行为没有任何问题,只是想到电池会耗尽并且我不希望任何简单的按钮按下,这可能是偶然的,停止服务。我希望它同样难以杀死这个应用程序后台进程,因为它是关闭手机,但我希望能够做到。
我尝试过finish(),它只是一个向后箭头,以及我在Googling的最后三个小时内看到的所有其他方法。我曾想过将我的退出按钮更改为关闭GPS关闭按钮,但如果用户使用后退箭头退出,他将进入主页并重新打开GPS。
要清楚。我的应用程序有一个基于菜单的主屏幕。如果按下后退箭头,任何有用的页面都将返回到该菜单。其中一个菜单项是EXIT。点击该菜单项会将您带到一个退出屏幕,该屏幕上有一个显示EXIT的按钮。如果用户偶然到达这里,他可以将箭头返回菜单。如果他点击退出页面上的退出按钮,我可以关闭所有处理程序和GPS,然后转到手机或平板电脑主屏幕。至少这是我想要的,也无法弄清楚该怎么做。
我使用类似的应用程序使用OnStop()或OnPause()来关闭GPS,这很痛苦。那不是我想要的。请不要告诉我这就是我想要做的。我知道该怎么做。这不是我要问的。
感谢。
更新:
感谢Chris,我已经解决了这个问题。我可以使用EXIT按钮关闭处理程序和GPS,然后运行此代码
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
更新#2 我在进一步测试中发现的问题是,当第二次调用它时,应用程序会返回到EXIT屏幕。
更新#3 添加finish();在startActivity(startMain)之后似乎有效。完成后向主菜单的后退箭头。希望一旦我安装了所有代码,它仍然可以工作。我删除了上面的第三行,所以我现在拥有的是:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startActivity(startMain);
finish();
答案 0 :(得分:1)
有一种非常简单的方法可以解决这个问题。您的主要问题是,如果用户想要退出,您需要EXIT活动不返回MAIN活动(即:在用户EXITS之后,活动堆栈应为空)。
让MAIN活动使用startActivityForResult()
调用EXIT活动。如果用户确实要退出,则EXIT活动可以返回RESULT_OK
,如果用户使用BACK按钮返回,则返回RESULT_CANCELED
。
MAIN活动然后在其onActivityResult()
中获得结果,如果用户真的想要退出,则可以调用finish()
,或者如果用户取消退出则不执行任何操作。
如果用户想要退出,这将导致活动堆栈被完全清除,以便下次用户启动应用程序时,它将转到MAIN活动。
答案 1 :(得分:0)
我想过将我的退出按钮更改为关闭GPS关闭按钮但是如果用户使用后退箭头退出,他会进入主页面并重新打开GPS。
这是一个比试图“退出”过程更合适的解决方案的根源 - 你只需要处理意外的重新激活。
您可以在禁用GPS后自动发送HOME意图。
您可以覆盖那里的后退按钮,然后发送HOME意图(如果GPS关闭)。
当您关闭GPS以指示它应该关闭时,您可以在共享首选项中设置一个标志,然后在任何活动中检查,否则您将自动将其打开。如果您检测到GPS应该关闭,而不是通常的选择只显示GPS关闭的对话框并询问是否要将其重新打开,或“退出”(即意图进入主屏幕)。