包管理器中的setComponentEnabledSetting是否启动了服务?

时间:2011-03-15 00:01:30

标签: android

如果我执行以下操作,是否会启动该服务?

PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
        new ComponentName(context, MyService.class),
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP);

如果没有,它会做什么?

http://developer.android.com/reference/android/content/pm/PackageManager.html

我读了javadoc,它只是说'设置启用的设置'。

2 个答案:

答案 0 :(得分:5)

  

如果我执行以下操作,是否会启动该服务?

没有。致电startService()即可启动该服务。

  

如果没有,它会做什么?

可以启用或禁用组件,如服务。禁用的组件无法启动。

例如,假设您想要响应某些系统广播,但仅限某些时间。您可以在清单中禁用<receiver>元素,然后在需要时使用上面显示的代码启用它。这样,您只需要让接收器在需要时响应广播,而不是所有时间。

答案 1 :(得分:0)

如果您正在寻找一种自动启动服务的方法,您可能希望这样做:

将此添加到清单:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
....
<receiver android:name=".service.YourReceiver" android:process=":remote"
                android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</receiver>

而不是从接收器开始服务......