如何启动在不同包中定义的服务?

时间:2010-04-25 16:25:27

标签: android service android-intent

我有两个应用程序,一个在命名空间com.gtosoft.voyager中运行,另一个是com.gtosoft.dash。从com.gtosoft.dash我想启动com.gtosoft.voyager中定义的服务...

我认为我需要一个意图,但是在使用startService()开始之前我会将什么arg(s)传递给意图?

如果他们在同一个包中,我可以使用

Intent svc=new Intent (SettingsActivity.this,VoyagerService.class);
startService(svc);

定义服务的清单摘录

<application android:icon="@drawable/voyagercarlogo" android:label="@string/app_name" android:debuggable="false">

    <provider android:name="com.gtosoft.voyager.VoyagerCProvider" 
        android:authorities="com.gtosoft.voyager"/>

    <service android:name=".VoyagerService"/>

    <activity android:name=".SettingsActivity" 
            android:label="Voyager"
            android:configChanges="keyboardHidden|orientation">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

2 个答案:

答案 0 :(得分:10)

虽然CommonsWare的回答在2010年4月是正确的,但事情发生了变化,你需要实际setComponent在另一个应用程序中启动服务。例如,

com.xyz.app1中的活动:

Intent i = new Intent();
String pkg = "com.xyz.app2";
String cls = "com.xyz.app2.MyService";
i.setComponent(new ComponentName(pkg, cls));
startService(i);

答案 1 :(得分:4)

我会在服务上设置<intent-filter>,并使用自定义操作,然后在Intent中使用它来启动或绑定到该服务。您可以在这对clientservice示例项目中看到相关示例。