Условно объявляем сервис в AndroidManifest
У меня есть сервис, в частности Android Daydream DreamService
, что я заявил в моем AndroidManifest.xml
файл. Когда мое приложение загружено, Android обнаруживает это объявление и добавляет мое приложение в качестве опции в список Daydreams, которые пользователь может выбрать в своих настройках. Я объявляю это Service
следующее...
<service android:name=".daydream.DaydreamService" android:exported="true"
android:icon="@drawable/icon" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.service.dreams.DreamService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.service.dream"
android:resource="@xml/daydream" />
</service>
Я пытаюсь увидеть, есть ли способ, которым я могу условно загрузить это Service
декларация программно. Другими словами, я хочу только заявить об этом DreamService
основанный на некоторой программной логике. Я не хочу, чтобы Android отображал или даже не знал о функции Daydream моего приложения, если я не включил ее программным способом.
Возможно ли что-то подобное?
2 ответа
Возможно ли что-то подобное?
Да, это так, даже без жирного шрифта.:-)
Вызов setComponentEnabledSetting()
на PackageManager
переключать, включен ли компонент. Использовать android:enabled
атрибут в манифесте, чтобы указать его начальное состояние, где по умолчанию это то, что он включен.
Итак, вы можете добавить android:enabled="false"
на ваше .daydream.DaydreamService
компонент, чтобы он был изначально отключен, затем используйте setComponentEnabledSetting()
чтобы включить его позже по мере необходимости.
Вы также можете сделать компонент условным для логического значения, которое вы объявляете в других местах ресурсов:
<service ...
android:enabled="@bool/ENABLE_SERVICE">
и тогда в некоторых конфигурациях ENABLE_SERVICE может быть установлено в значение true, а в других - в false (например, если вы хотите, чтобы сервис предоставлялся только на экранах размером с телефон, а не на экранах планшета).