如果在 AndroidManifest 中注册,广播接收器将不起作用

Broadcast Receiver doesn't work if registered in AndroidManifest

我有广播接收器,应该可以获取当前正在播放的歌曲信息。如果我在 activity 中注册它,它工作正常,但如果我在清单文件中注册它,它就不起作用。

我如何在 AndroidManifest 中注册接收器:

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".SongReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.music.playstatechanged" />
            <action android:name="com.android.music.metachanged" />
        </intent-filter>
    </receiver>
</application>

我的广播接收器:

class SongReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {

    val action = intent.action
    val cmd = intent.getStringExtra("command")
    Log.d("mIntentReceiver", "$action / $cmd")
    val artist = intent.getStringExtra("artist")
    val track = intent.getStringExtra("track")
    Toast.makeText(context, "$artist - $track", Toast.LENGTH_LONG).show()

}
}

我试过像这样使用完整的包名,但没有用:

    <receiver
        android:name="com.fullpackage.SongReceiver"
        ...
    </receiver>

在 Android Oreo 中,除非 whitelist, see doc

中列出了意图,否则应用程序不能再使用清单中的广播接收器