Awesome
Awesome

Reputation: 457

Invoke custom broadcastreceiver for another app

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

Answers (1)

323go
323go

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

Related Questions