Android 应用程序找不到外部服务-为什么?

Android 应用程序找不到外部服务-为什么?,android,android-intent,android-service,android-intentservice,Android,Android Intent,Android Service,Android Intentservice,在应用程序A中,我有以下代码来启动应用程序B中的服务: public void startAppBService() { PackageManager packageManager = getPackageManager(); Intent serviceIntent = new Intent("com.example.project.appBCommunicator"); List<ResolveInfo> services = packageManager

在应用程序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);
    }
}
我的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找不到应用程序B的IntentService(
services.size()
返回0)。我做错了什么吗?

你的
意图是:

Intent serviceIntent = new Intent("com.example.project.appBCommunicator");
<intent-filter>
    <action android:name="com.example.project.appBReceive" />
    />
</intent-filter>
这里,您的操作字符串是
com.example.project.appBCommunicator

您的
是:

Intent serviceIntent = new Intent("com.example.project.appBCommunicator");
<intent-filter>
    <action android:name="com.example.project.appBReceive" />
    />
</intent-filter>

/>
这里,您的操作字符串是
com.example.project.appBReceive


您的
意图
与您的
不匹配,因为操作字符串不匹配。

显然,我的解决方案是删除我的IntentService文件,并使用Android Studio自动生成向导以其他名称重新创建它,而不是手动创建它。我不知道这为什么会有不同,但确实如此