我错过了一些重要的东西或......
我有两个应用程序,其中一个包含带有在 AndroidManifest 中声明的意图过滤器的导出服务:
<service
android:name=".MyService"
android:exported="true"
android:permission="my.permission" >
<intent-filter>
<action android:name="my.service" />
</intent-filter>
</service>
我可以使用“my.service”操作成功地从另一个应用程序绑定到该服务。但我想启动服务(向它发送命令)。如果我写:
Intent intent = new Intent("my.service");
intent.setAction("my.command");
ComponentName cn = startService(intent);
我进去null
了cn
(服务无法解决)。但是,如果我将其更改为:
PackageManager packageManager = getPackageManager();
Intent serviceIntent = new Intent("my.service");
List<ResolveInfo> services = packageManager.queryIntentServices(serviceIntent, 0);
if (services.size() > 0) {
ResolveInfo service = services.get(0);
intent = new Intent();
intent.setClassName(service.serviceInfo.packageName, service.serviceInfo.name);
intent.setAction("my.command");
ComponentName cn = startService(intent);
}
服务已成功启动。我在包含第一个变体的 StackOverflow 上看到了很多建议,但我无法让它发挥作用。有任何想法吗?