Search code examples
androidbroadcastreceiverandroid-manifestandroid-broadcast

How to send a custom broadcast action to receivers in manifest?


MyReceiver.java

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {
        Log.i("MyReceiver", "MyAction received!");
    }
}

In AndroidManifest.xml (under the application tag)

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="MyAction" />
    </intent-filter>
</receiver>

MainActivity.Java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sendBroadcast(new Intent("MyAction"));
    }
}

MyReceiver.onReceive method is never triggered. Did I miss something?


Solution

  • I use Android 8.

    Then you have to use an explicit Intent, one that identifies the receiver, such as:

    sendBroadcast(new Intent(this, MyReceiver.class).setAction("MyAction"));
    

    See Broacast limitations in Android 8 release docs.