Android: включить и службы

В настоящее время я изучаю, как создавать и использовать сервисы на Android. Я просмотрел Android SDK для получения дополнительной помощи и нашел android:enable=[true | ложь].

в SDK сказано, что:

Чтобы служба была включена, оба атрибута и должны иметь значение «истина» (поскольку они оба по умолчанию). Если значение равно false, служба отключена; он не может быть создан.

Поэтому я хотел бы знать, в чем заключается интерес / почему (в целом)

  • установка приложения позволяет как «false».
  • установка включения службы как «false».

Я говорю, что если мы установим service enable как false, то не сможем вызвать эту службу, так зачем же мы вообще создаем эту службу?

Спасибо и извините за такое длинное сообщение.


person Blood-HaZaRd    schedule 25.11.2011    source источник
comment
@rds Я только что поднял метавопрос об этом вопросе и принятом ответе.   -  person Mark Adamson    schedule 27.07.2018


Ответы (2)


Новый SAF (Storage Access Framework) — хороший пример использования атрибута android:enabled. http://developer.android.com/guide/topics/providers/document-provider.html< /а>

Для атрибута android:enabled задано логическое значение, определенное в файле ресурсов. Назначение этого атрибута — отключить провайдера на устройствах под управлением Android 4.3 или ниже. Например,

android:enabled="@bool/atLeastKitKat" 

Помимо включения этого атрибута в манифест, вам необходимо сделать следующее: В вашем файле ресурсов bool.xml в разделе res/values/ добавьте следующую строку:

<bool name="atLeastKitKat">false</bool> 

В вашем файле ресурсов bool.xml в разделе res/values-v19/ добавьте эту строку:

<bool name="atLeastKitKat">true</bool>
person Vivart    schedule 10.01.2014
comment
Хороший и полезный пример - person matreshkin; 06.03.2014
comment
В другом вопросе они также используют этот трюк, чтобы параметры времени сборки с Gradle - person Mark Adamson; 27.07.2018

установка приложения позволяет как «false».

Я не знаю веских причин для этого.

Я говорю, что если мы установим service enable как false, то не сможем вызвать эту службу, так зачем же мы вообще создаем эту службу?

Как правило, это правда. android:enabled фактически наследуется для всех компонентов, поэтому он не уникален для служб. Вот сценарии, где это может быть использовано:

  • Активность: вы хотите иметь второй значок в панели запуска, но только в том случае, если пользователь покупает что-либо посредством покупки в приложении (например, обновляет функции до версии «Pro»).

  • BroadcastReceiver: вы хотите получить управление во время загрузки через ACTION_BOOT_COMPLETED, но вам это не нужно все время

  • Service и ContentProvider: у вас есть семейство приложений, где вам нужна (и нужна) только одна реализация поставщика услуг/контента, даже если их несколько. приложения из вашей семьи установлены пользователем

В этих случаях вы можете отключить компонент (android:enabled="false") в манифесте и использовать PackageManager и setComponentEnabledSetting() для их условного включения позже.

person CommonsWare    schedule 25.11.2011