2012-07-08 57 views
2

我正在为Android编写基于GPS的应用程序。我想要一个按钮来退出应用程序,这将关闭GPS,但我不想回到家里或关闭这个程序。退出Android应用程序按钮 - 真的

我已阅读This线程和许多其他人做了很好的解释为什么我不想做我想做的事情。问题是,有后台进程,如果我只是退出应用程序的箭头,GPS仍在运行。我明白我可以用OnStop()或OnPause()来关闭它们,但是我不想要后退箭头或回家来停止任何操作。我希望所有的GPS和处理程序继续运行,无论用户做什么,除非他在我的主屏幕上点击EXIT,然后将他带到另一个确认退出并进行清理的屏幕。这样,用户可以将箭头从退出屏幕退出,而不会在实际退出时被误操作。

请注意,此应用程序将用于带有手套的恶劣条件下的明亮阳光下。读取任何东西非常困难,所以我使用高对比度的高对比度字体100。除非用户真的希望它停止,否则它不能停下来。但让它运行会杀死电池。我对系统的行为没有任何问题,如果我只是让它运行,只是想到电池将耗尽,并且我不希望任何简单的按钮按下(这可能是偶然的),以停止服务。我希望它很难杀死这个应用程序后台进程,因为它是关闭手机,但我希望能够做到这一点。

我试过完成(),这只是一个后退箭头,以及我在过去三个小时的Google搜索中看到的其他所有方法。我曾考虑将我的EXIT按钮更改为关闭GPS按钮,但如果用户使用后退箭头退出,他会进入主页面并重新打开GPS。

只是要清楚。我的应用程序有一个基于菜单的主屏幕。如果后退箭头被击中,任何有用的页面将返回到该菜单。其中一个菜单项是EXIT。点击该菜单项会将您带到一个退出屏幕,该屏幕上有一个显示EXIT的按钮。如果用户偶然来到这里,他可以退回到菜单。如果他点击退出页面上的EXIT按钮,我可以关闭所有处理程序和GPS,然后进入手机或平板电脑主屏幕。至少这是我想要的,不知道该怎么做。

我已经使用类似的应用程序,使用OnStop()或OnPause()来关闭GPS,他们是一个痛苦。这不是我想要的。请不要告诉我这就是我想要做的。我知道该怎么做。这不是我所要求的。

谢谢。

UPDATE:

感谢Chris我几乎解决了这一点。我可以把我的处理程序和GPS了与我的退出按钮,然后运行该代码

 Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 

更新#2 ,我只是在进一步的测试中发现的问题是,应用程序返回到屏幕上的退出时,它是要求第二次。

UPDATE#3 Adding finish();在startActivity(startMain)后似乎工作。完成后向后进入主菜单。希望一旦我安装了所有的代码,它仍然可以工作。我删除了第三线之上所以我现在是这样的:

 Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startActivity(startMain); 
    finish(); 
+1

使用'onStop'和'onPause' ...大声笑jk – 2012-07-08 17:09:04

+0

请看看我的答案。我认为这比你一直在玩的解决方案简单得多。 – 2012-07-08 19:53:19

回答

0

我曾经想过改变我的退出按钮,将打开的GPS关闭按钮,但随后如果用户使用后退箭头退出他得到主页面,然后打开GPS。

这是比尝试“退出”过程更合适的解决方案的根源 - 您只需要处理意外重新激活。

  • 您可以在禁用GPS后自动发送HOME意图。

  • 你可以覆盖后面的按钮,并发送一个HOME意图,而不是(如果GPS关闭)。

  • 当你关掉GPS,以表明它应该是掉,然后检查,在任何地方的活动,否则你将自动打开它,你可以在设置共享偏好的标志。如果你发现GPS应该是关闭的,而不是你通常的选择,只是显示一个对话框,关闭GPS,询问他们是否想要打开它,或者“退出”(即意图到主屏幕)。

+0

我正要回答这个问题,但这非常覆盖它。只是想补充一点,OP可能会发现导航应用作为实现此行为的有用指南。 – 2012-07-08 17:22:46

+0

那很简单。很明显,我的退出按钮可以关闭GPS和处理程序,之后我使用此代码跟随HOME意图。 '代码'\t \t Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); – 2012-07-08 17:23:28

+0

@AllenEdwards和最后一件事......如果您退出应用程序的主要活动,“后退按钮”将结束任务......所以我真的认为,如果您希望应用的导航与其他Android应用保持一致,你应该让它禁用GPS(即在你的主要活动的'onDestroy'方法中禁用GPS)。您可以通过重写'onBackPressed'来提供确认对话框,以便用户知道该任务将被终止。再次,您可以查看导航应用程序的指导。 – 2012-07-08 17:29:33

1

有一个非常简单的方法来解决这个问题。如果用户想退出,你的主要问题是你需要EXIT活动不能返回MAIN活动(即:用户退出后,活动栈应该是空的)。

使用startActivityForResult()让MAIN活动调用EXIT活动。如果用户真的想退出,EXIT活动可以返回RESULT_OK,如果用户使用BACK按钮返回,它将返回RESULT_CANCELED

然后MAIN活动在onActivityResult()中得到结果,如果用户真的想要退出,或者只是在用户取消退出时不做任何事情,则可以调用finish()

如果用户想要退出,这将导致活动堆栈被完全清除,以便下次用户启动应用程序时,它将进入MAIN活动。

相关问题