android - 从服务打开系统设置

标签 android android-service

我正在编写一项服务,以在我的应用程序在前台运行时收集位置读数。在 LocationListener 中,我想使用 onProviderDisabled() 方法打开一个对话框,告诉用户位置提供程序已禁用,并在对话框上有一个按钮将启动系统的位置设置面板,允许用户在选择时启用位置提供程序。如果这是一项 Activity ,我会使用 startActivityforResult() 启动系统设置,但我只能使用服务中的 startActivity

我的问题是:有没有一种方法可以打开服务的设置,并在用户更改设置后关闭这个新 Activity 并返回到我的应用程序?

编辑:我想要实现的是一个服务,从应用程序打开的那一刻一直运行到它关闭并收集位置读数,保持对位置的最佳估计在应用程序中使用。如果服务中的 LocationListener 调用了 onProviderDisabled,我希望这会导致打开一个对话框,让用户可以选择转到“系统设置”并启用位置提供程序(或者取消并继续,尽管某些应用程序的功能在没有位置的情况下将无法使用)。我同意 Service 可能不是执行对话框/Activity 启动部分的地方,因为它是没有 UI 的后台组件,但我不确定代码应该放在哪里.

最佳答案

从对你的问题的编辑和对 Sam 的回答的评论,我基本上会检查应用程序的 Activity (或所有 Activity )并从那里启动对话框和后续的“设置”页面(如果用户选择转到“设置”)。

基本上,让服务根据主 Activity 遇到的当前环境(禁用/启用提供程序)执行它需要的操作。如果您的服务将在没有用户前端的情况下运行,那么让它补偿并相应地减少其“职责”。<​​/p>

此外,在这种情况下,Sam 的使用通知(这反过来可能会导致“设置”被打开)的想法是一个很好的中间立场。

编辑 进一步解释。以像电子邮件应用程序这样简单的东西为例。这有两个方面...

首先是一个 UI - 当用户打开他们的电子邮件应用程序时,如果“网络”被禁用,用户将被告知一个对话框,其中包含转到网络设置以启用网络的选项。按 BACK(从设置)将返回到电子邮件应用程序,它将尝试下载任何新电子邮件。如果用户决定不启用网络,他们仍然可以查看以前下载的电子邮件(类似于您情况下的部分功能)。

其次,即使用户界面关闭,后台服务也会定期(每 15 分钟、30 分钟、1 小时等)尝试下载任何新电子邮件。如果网络被禁用,它将直接进入休眠状态(直到下一次下载时间)。

理论上,如果用户禁用网络,后台电子邮件服务“可以”提供一个对话框或通知说“你知道我现在不能工作吗?”......这就是你想要做的但是,如果该服务有其他事情要做,它可以简单地做这些事情而忽略任何与网络相关的任务。下次用户启动 Activity 时,他们会看到一个对话框,其中包含启用网络的选项。

这样更有意义吗?

关于android - 从服务打开系统设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905893/

相关文章:

android - 如何在我的 Android Widget 类中构建我的 onReceive 方法来切换 ImageView 的图像?

android - 在不提示用户登录的情况下将视频上传到youtube API V3

Android 为完成的启动服务设置监听器

android - 每次结束电话都会回到我的 Activity ,即使我没有从我的应用程序 android 调用电话

android - "Error:(2) Error retrieving parent for item No resource found that matches the given name ' android :TextAppearance. Material.Widget.Button.Inverse'

android - 使用紧急拨号器启动 Android 应用程序

java - 使用 PendingIntent 停止服务

android - IntentService 防止 Activity 被破坏

来自服务器的 Android 通知

android - 如何根据正值或负值更改自定义 ListView 中数组列表项的颜色