开发者

How do I start a service which is defined in a different package?

I have two apps, one runs in namespace com.gtosoft.voyager and the other is com.gtosoft.dash. From com.gtosoft.dash I would like to start up the service which is defined in com.gtosoft.voyager...

I think I need an intent, but what arg(s) would I pass to the intent before kicking it off with startService()?

If they were in the same package I could just use

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

Snippet of Manifest which defines the service

<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>


While CommonsWare's answer was correct back in April of 2010, things have a changed and you need to actually setComponent to start a service in another application. For instance,

Activity in 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);


I would set up an <intent-filter> on the service, with a custom action, and then use it in your Intent to start or bind to that service. You can see an example of that in this pair of client and service sample projects.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜