Android: как запустить сервис при загрузке на основе пользовательских настроек? - PullRequest
0 голосов
/ 06 мая 2010

Я пытаюсь написать приложение, которое состоит из действия, которое управляет фоновым сервисом. Однако я хочу реализовать пользовательские настройки для автоматического запуска службы во время загрузки. У меня есть пользовательские настройки, реализованные с помощью SharedPreferences, и у меня есть службы, запускающиеся при загрузке с использованием BroadcastReceiver и прослушивающие BOOT_COMPLETED.

Однако я не могу найти хороший способ реализовать параметр, чтобы служба запускалась только при загрузке, если этот параметр включен. Я могу придумать несколько дешевых способов сделать это (например, возиться с onCreate () в сервисе или создать / проверить файл на SD-карте), но я хочу следовать хорошей практике.

Должен быть хороший способ сделать это, потому что есть множество приложений, которые делают это, я просто не могу найти в Интернете ничего о том, как это сделать.

Спасибо

Ответы [ 3 ]

10 голосов
/ 12 августа 2010

Лучший способ сделать это - использовать PackageManager.setComponentEnabledSetting (): http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)

Поэтому просто решите, хотите ли вы, чтобы ваш прием был включен или нет по умолчанию, установивAndroid: включен в манифесте.Затем используйте этот API для явного включения или отключения компонента во время выполнения по желанию.Если компонент отключен, при загрузке он не будет доступен и, следовательно, не получит широковещательную рассылку.

Fwiw, использование этого подхода намного лучше, чем проверка предпочтения при получении намерения, поскольку он позволяет избежатьзапускать ваше приложение при каждой загрузке.Поскольку все больше и больше приложений хотят запускаться во время загрузки, возможно, чтобы что-то сделать, не рекомендуется запускать их вообще, если им это не нужно.

2 голосов
/ 06 мая 2010

Очевидно, вам нужно настроить это как получатель 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 ...
      }
    }
  }
}
1 голос
/ 06 мая 2010

Если я что-то упустил, у вас уже есть все кусочки ... вам просто нужно сложить их вместе.

Поскольку ваш BroadcastReceiver почти наверняка запускает вашу службу после получения BOOT_COMPLETED, просто проверьте ваши SharedPreferences из BroadcastReceiver с помощью контекста, предоставленного в onReceive, и вызывая getSharedPreferences ().

Если ваш параметр запуска при загрузке присутствует и включен, запустите службу из BroadcastReceiver, если нет, не запускайте службу.

Simple!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...