2

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

这样的事情可能吗?

4

2 回答 2

6

这样的事情可能吗?

是的,即使没有黑体字也是如此。:-)

调用setComponentEnabledSetting()PackageManager切换组件是否启用。使用android:enabled清单中的属性来指示它的起始状态,这里整体默认是启用的。

因此,您可以添加android:enabled="false"您的.daydream.DaydreamService组件以使其最初被禁用,然后setComponentEnabledSetting()根据需要使用它来启用它。

于 2014-08-25T22:52:35.353 回答
2

您还可以使组件以您在资源中其他地方声明的布尔值为条件:

<service ...
   android:enabled="@bool/ENABLE_SERVICE">

然后您可以在某些配置中将 ENABLE_SERVICE 设置为 true,但在其他配置中设置为 false(例如,如果您只希望在手机大小的屏幕上提供服务,而不是在平板电脑大小的屏幕上)。

于 2014-08-26T15:32:35.803 回答