В приложении A у меня есть следующий код для запуска службы в приложении B:
public void startAppBService() {
PackageManager packageManager = getPackageManager();
Intent serviceIntent = new Intent("com.example.project.appBCommunicator");
List<ResolveInfo> services = packageManager.queryIntentServices(serviceIntent, 0);
Log.d("Services", Integer.toString(services.size()));
if (services.size() > 0) {
ResolveInfo service = services.get(0);
serviceIntent.setClassName(service.serviceInfo.packageName, service.serviceInfo.name);
serviceIntent.setAction("com.example.project.appBReceive");
serviceIntent.putExtra("foo", "bar");
serviceIntent.putExtra("appAReceiver", resultReceiver);
ComponentName cn = startService(serviceIntent);
}
}
Я называю этот код в методе onCreate
приложения A.
InПриложение B, я зарегистрировал свой IntentService в манифесте, как этот
<service
android:name="com.example.project.appBCommunicator"
android:enabled="true"
android:exported="true"
android:process=":remote">
<intent-filter>
<action android:name="com.example.project.appBReceive" />
/>
</intent-filter>
</service>
Мой код для IntentService такой:
public class AppBCommunicator extends IntentService {
public AppBCommunicator() {
super("AppBCommunicator");
}
public AppBCommunicator(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
ResultReceiver rec = intent.getParcelableExtra("appAReceiver");
ResultReceiver sendingReceiver = receiverForSending(rec);
String val = intent.getStringExtra("foo");
Bundle bundle = new Bundle();
bundle.putString("resultValue", "My Result Value. Passed in: " + val);
sendingReceiver.send(Activity.RESULT_OK, bundle);
}
public static ResultReceiver receiverForSending(ResultReceiver actualReceiver) {
Parcel parcel = Parcel.obtain();
actualReceiver.writeToParcel(parcel,0);
parcel.setDataPosition(0);
ResultReceiver receiverForSending = ResultReceiver.CREATOR.createFromParcel(parcel);
parcel.recycle();
return receiverForSending;
}
}
По какой-то причине приложение A не находит IntentService приложенияB (services.size()
возвращает 0).Что-то я делаю не так?