2

我正在为 Android 编写一个基于 GPS 的应用程序。我想要一个按钮来退出将关闭 GPS 的应用程序,但我不希望返回箭头或 home 来关闭进程。

我已经阅读了 这个线程和许多其他线程,它们很好地解释了为什么我不想做我想做的事情。问题是如果我只是将箭头退出应用程序,则存在后台进程并且 GPS 仍在运行。我知道我可以使用 OnStop() 或 OnPause() 关闭这些,但我不希望返回箭头或 home 停止任何事情。无论用户做什么,我都希望所有 GPS 和处理程序继续运行,除非他在我的主屏幕上点击 EXIT,这会将他带到另一个屏幕,即确认退出并进行清理。这样,如果被错误击中,用户可以在不实际退出的情况下将箭头返回退出屏幕。

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

我已经尝试过finish(),它只是一个后退箭头,以及我在过去三个小时的谷歌搜索中看到的所有其他方法。我曾想过将我的退出按钮更改为关闭 GPS 按钮,但是如果用户使用后退箭头退出,他会进入主页并重新打开 GPS。

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

我使用过类似的应用程序,它们使用 OnStop() 或 OnPause() 来关闭 GPS,它们很痛苦。那不是我想要的。请不要告诉我这是我想做的。我知道该怎么做。这不是我要问的。

谢谢。

更新:

感谢克里斯,我几乎解决了这个问题。我可以使用 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 添加完成();在 startActivity(startMain) 似乎工作之后。完成后向主菜单返回箭头。希望一旦我安装了所有代码,它仍然可以工作。我删除了上面的第三行,所以我现在拥有的是:

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

2 回答 2

1

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

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

然后,MAIN 活动在其中获取结果,如果用户真的想退出,则onActivityResult()可以调用,或者如果用户取消退出,则什么也不做。finish()

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

于 2012-07-08T19:52:36.477 回答
0

我曾想过将我的退出按钮更改为关闭 GPS 按钮,但是如果用户使用后退箭头退出,他会进入主页并重新打开 GPS。

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

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

  • 您可以在那里覆盖后退按钮,并改为发送 HOME 意图(如果 GPS 已关闭)。

  • 您可以在关闭 GPS 时在共享首选项中设置一个标志以指示它应该关闭,然后在您将自动打开它的任何活动中检查它。如果您检测到 GPS 应该关闭,而不是您通常的选择,只需显示 GPS 已关闭的对话框并询问他们是否要重新打开它,或“退出”(即进入主屏幕)。

于 2012-07-08T17:13:15.477 回答