我有一项服务,特别是Android Daydream DreamService
,我在AndroidManifest.xml
文件中声明了这项服务。加载我的应用后,Android会检测到此声明,并将我的应用添加到用户可在其“设置”中选择的白日梦列表中。我将此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功能。
这样的事情可能吗?
答案 0 :(得分:3)
这样的事情可能吗?
是的,即使没有粗体字也是如此。 : - )
Call setComponentEnabledSetting()
on PackageManager
切换组件是否已启用。使用清单中的android:enabled
属性来指示其起始状态,其中默认值是启用状态。
因此,您可以在android:enabled="false"
组件上添加.daydream.DaydreamService
以使其最初被停用,然后根据需要使用setComponentEnabledSetting()
启用它。
答案 1 :(得分:2)
您还可以使组件以您在资源中的其他位置声明的布尔值为条件:
<service ...
android:enabled="@bool/ENABLE_SERVICE">
然后你可以在某些配置中将ENABLE_SERVICE设置为true,但在其他配置中设置为false(例如,如果您只想在电话大小的屏幕上使用该服务,而不是在平板电脑大小的屏幕上)。