I have an app some time now in which I call a service through a broadcast receiver (MyStartupIntentReceiver). The code in the broadcast receiver in order to call the service is:
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.duk3r.eortologio2.MyService");
context.startService(serviceIntent);
}
The problem is that in Android 5.0 Lollipop I get the following error (in previous versions of Android, everything works ok):
Unable to start receiver com.duk3r.eortologio2.MyStartupIntentReceiver: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.duk3r.eortologio2.MyService }
What do I have to change in order for the service to be declared as explicit and start normally? Tried some answers in other similar threads but although i got rid of the message, the service wouldn't start.
<intent-filter>
on a component when you want third-party apps to communicate with that component. You seem to have fallen into the trap of assuming that you need an<intent-filter>
for everything -- in reality, you infrequently need an<intent-filter>
. An explicitIntent
is when you designate the component to talk to in theIntent
itself, usually using the constructor that takes a JavaClass
object as the second parameter. That, rather than implicitIntent
s and<intent-filter>
s, are what you should use for components local to your app. – CommonsWare Jan 8 '15 at 14:34