Android 应用程序找不到外部服务-为什么?
在应用程序A中,我有以下代码来启动应用程序B中的服务: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
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自动生成向导以其他名称重新创建它,而不是手动创建它。我不知道这为什么会有不同,但确实如此