Как запустить службу, которая определена в другом пакете? - PullRequest
3 голосов
/ 25 апреля 2010

У меня есть два приложения: одно работает в пространстве имен com.gtosoft.voyager, а другое - com.gtosoft.dash. С com.gtosoft.dash я хотел бы запустить службу, которая определена в com.gtosoft.voyager ...

Я думаю, что мне нужно намерение, но какие аргументы я передам в намерение, прежде чем начинать его с startService ()?

Если бы они были в одной упаковке, я мог бы просто использовать

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 ]

10 голосов
/ 31 декабря 2014

Несмотря на то, что ответ CommonsWare был верным еще в апреле 2010 года, все изменилось, и вам действительно нужно установить компонент для запуска службы в другом приложении. Например,

Активность в 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);
4 голосов
/ 25 апреля 2010

Я бы настроил <intent-filter> для службы с настраиваемым действием, а затем использовал его в вашем Intent для запуска или привязки к этой службе. Вы можете увидеть пример этого в этой паре client и service примеров проектов.

...