在AndroidManifest中有条件地声明服务

时间:2014-08-25 22:50:12

标签: android service manifest dreamservice daydream

我有一项服务,特别是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功能。

这样的事情可能吗?

2 个答案:

答案 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(例如,如果您只想在电话大小的屏幕上使用该服务,而不是在平板电脑大小的屏幕上)。

相关问题