Почему не срабатывает простейший BroadCastReceiver

Почему не срабатывает простейший Receiver , я уже ничего непонимаю если регистрировать програмно работает: Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.maioya.testreceivers">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.TestReceivers">
        <receiver
            android:name=".TestReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="net.maioya.testreceivers.ActionTestReceiver"/>
            </intent-filter>
        </receiver>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Receiver:

class TestReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        Log.i("TAG", "working")
    }

    companion object {
        const val MACTION = "net.maioya.testreceivers.ActionTestReceiver"
    }
}

MainActivity:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var button = findViewById(R.id.button) as Button
        button.setOnClickListener {
            val intent = Intent()
            intent.action = TestReceiver.MACTION
            //intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
            sendBroadcast(intent)
        }
    }
}

Ответы (2 шт):

Автор решения: Madoka Magica

Похоже что это из-за версий андроид. Там с 8 версии ограничения наложены видимо это коснулось и моих. Вот кусок официального гайда: Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers. If your app targets Android 8.0 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that don't target your app specifically). You can still use a context-registered receiver when the user is actively using your app.

→ Ссылка
Автор решения: Style-7

Потому что ваш BroadcastReceiver является явным (explicit), то есть предназначен только для вашего приложения, а Intent которые ловит данный приемник должен содержать ComponentName. Это можно сделать например методом setPackage.

    Intent intent = new Intent("TEST");
    intent.setPackage( getPackageName() );
    sendBroadcast(intent);

И все начинает работать. Флаг в манифесте android:exported="true" не нужен.

В документации информация по данному нюансу отсутствует.

→ Ссылка