无法通过 IMPLICIT 意图启动意图服务

Unable to start intent service via IMPLICIT intent

AndroidManifest.xml

<application android:name=".MyApplication"
         android:icon="@drawable/icon"
         android:label="@string/app_name"
         >

 <service android:name=".MyService"
          android:exported="true">
          <intent-filter>
            <action android:name="android.service.myapp.MyService.actionA"/>
            <action android:name="android.service.myapp.MyService.actionB"/>
            <category android:name="android.intent.category.DEFAULT"/>
          </intent-filter>

 </service>

</application>

如果我使用以下代码,我的服务就会启动:

Intent intent = new Intent(context, MyService.class);
intent.setAction("android.service.myapp.MyService.actionA");
context.startService(intent);

但是如果我用这个代码启动它,我的服务没有启动:

Intent intent = new Intent("android.service.myapp.MyService.actionA");
context.startService(intent);

使用 "implicit" Intent 启动或绑定 Service 是不安全的。从 Lollipop 开始,bindService() 需要一个明确的 Intent(您的第一个示例,您为 Service 指定 ContextClass。)[= 的行为17=] 未定义用于启动服务的隐式 Intent。来自 startService() 的文档:

The Intent should contain either contain the complete class name of a specific service implementation to start or a specific package name to target. If the Intent is less specified, it log a warning about this and which of the multiple matching services it finds and uses will be undefined.

如果您使用显式形式,您可以从清单中完全删除 <intent-filter>:不需要。如果您需要通过 Intent 指定服务要完成的某些类型的工作,请考虑在 Intent.

中使用额外的内容