Reputation: 457
I have 2 apps, App1 and App2
In App1, manifest file has BroadcastReceiverIncoming defined as below.
<receiver android:name="packagename.BroadcastReceiverIncoming"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="packagename.BroadcastReceiverIncoming" />
</intent-filter>
</receiver>
BroadcastReceiverIncoming is defined in App1.
Now in App2, I am calling this to invoke broadcast receiver but it's now working somehow?
Intent intent = new Intent();
intent.setClassName("packageName", "packagename.BroadcastReceiverIncoming");
intent.setAction("packagename.BroadcastReceiverIncoming");
appContext.sendBroadcast(intent);
Even with line 2 commented/uncommented, it does not invoke BroadcastReceiverIncoming.
Through adb if I call adb shell am broadcast -n packageName/packagename.BroadcastReceiverIncoming
BroadcastReceiverIncoming is being invoked correctly in App1.
Upvotes: 1
Views: 1696
Reputation: 14274
I have this working as below:
myServiceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent data) {
if (data.getAction().equals(POLayer.SVC_INTENT)) {
final String alias = data.getStringExtra("alias");
final String command = data.getStringExtra("action");
if (command.equals("dosomething")) {
new DoSomethingTask().execute( alias );
}
}
}
};
....
onCreate:
final IntentFilter filter = new IntentFilter(POLayer.SVC_INTENT);
filter.addAction(POLayer.ANOTHER_INTENT);
this.registerReceiver(this.myServiceReceiver, filter);
In the sender:
Intent i = new Intent();
i.setAction( SVC_INTENT );
i.putExtra( "alias", theAlias );
i.putExtra( "action", "dosomething" );
this.sendBroadcast( i );
The only difference I see is that I'm not relying on the package/component names, but rather define my own ACTIONs. Also, all names are case-sensitive, so you might want to check on packageName vs. packagename.
Upvotes: 2