Android:如何根据用户设置在启动时启动服务?

时间:2010-05-06 15:51:20

标签: android

我正在尝试编写一个由管理后台服务的活动组成的应用程序。但是,我想实现一个用户设置,以便在启动时自动启动服务。我有使用SharedPreferences实现的用户设置,我通过使用BroadcastReceiver并监听BOOT_COMPLETED来启动服务。

但是,我无法找到实现设置的好方法,这样只有启用了所述设置才能在启动时启动服务。我可以想到一些廉价的方法(例如在服务中弄乱onCreate(),或者在SD卡上创建/检查文件)但是我想遵循良好的做法。

必须有一个很好的方法来做到这一点,因为有大量的应用程序可以做到这一点,我在网上找不到任何关于如何做的事情。

由于

3 个答案:

答案 0 :(得分:10)

执行此操作的最佳方法是使用PackageManager.setComponentEnabledSetting():http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName,int,int)

因此,通过在清单中设置android:enabled,可以简单地决定是否要默认启用接收。然后使用此API在运行时根据需要显式启用或禁用该组件。如果禁用该组件,则在启动时它将不可用,因此不会接收广播。

Fwiw,使用这种方法比在接收意图时检查首选项要好得多,因为它避免了系统每次启动时都必须启动应用程序。随着越来越多的应用程序想要在启动期间启动以执行某些操作,如果他们不需要,则根本不启动它们是一件好事。

答案 1 :(得分:2)

显然你需要在你的清单中将它设置为BOOT_COMPLETED接收器,但是这段代码可以工作 - 它几乎直接来自我的一个应用......

public class Booter extends BroadcastReceiver {

  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
      SharedPreferences prefs = context.getSharedPreferences("PACKAGENAME_preferences",0);
      if (prefs.getBoolean("startatboot",false)) {
        ... DO STUFF HERE ...
      }
    }
  }
}

答案 2 :(得分:1)

除非我遗漏了什么,否则你已经拥有了所有的东西......你只需要把它们放在一起。

由于您的BroadcastReceiver几乎肯定是在收到BOOT_COMPLETED后启动服务的,所以只需使用onReceive中提供的Context并调用getSharedPreferences()来检查BroadcastReceiver的SharedPreferences。

如果启动并启用了启动启动设置,请从BroadcastReceiver启动服务,否则,请不要启动服务。

简单!