我的 Android 广播接收器从未被触发

My Android broadcast receiver is never triggered

在 AndroidManifest.xml 我有这个:

<receiver android:name=".MyBroadcast"  android:exported="true"/>

我的广播文件:

package com.myapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;


public class MyBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent intent1 = new Intent(context, Radio.class);
        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);
    }
}

我正在尝试 运行 应用程序关闭后在后台播放音乐。

onReceive() 方法仅在您注册的事件发生时调用。您尚未声明将触发 onReceive() 方法的事件。所以,广播接收器不知道它应该听什么。

您应该从 Android 文档中阅读更多关于广播接收器和 Activity 生命周期方法的信息。

这类似于要求某人 X(任何人)为您从市场上获得 ________。他在市场上寻找 ________,但他不知道那是什么。所以,很明显,他不能为你得到它。您需要告诉接收者要寻找什么。

那是因为您从未指定您实际监听的意图。

您需要注册广播接收器以侦听特定的广播(事件),或者在清单中使用 intent-filter tag or dynamically at runtime. See this question 以获得更多关于差异的讨论。

这是一个如何在清单中执行此操作的示例(来自链接的问题):

<receiver android:name="TestReceiver">
        <intent-filter>
            <action android:name="android.media.AUDIO_BECOMING_NOISY"/>
        </intent-filter>
    </receiver>

这意味着广播接收器正在监听 AUDIO_BECOMING_NOISY 意图。 (您需要将其替换为更合适的意图,以反映您何时需要 运行)。

有一个非常有用的 Intent 列表,您可以收听 here。您可以 select 从那里(或从其中一个库)进行广播,或者,如果您正在侦听应用程序中发生的事件,您可以自己发起广播。

此外,请确保确实引发了相关事件。如果您正在收听的广播从未发生,则广播接收器将永远不会被触发。

有关相关阅读,请参阅 Observer Pattern(这是 Android 广播接收器实现的设计模式)。

onReceive() 方法仅在您注册的事件发生时调用。您尚未声明将触发 onReceive() 方法的事件。所以,Broadcast Receiver 不知道它应该听什么。

您应该从 Android 文档中阅读有关 Broadcast Receivers 和 Activity 生命周期方法的更多信息。

我认为您不需要使用 Broadcast Receivers。当您的应用程序关闭时,您可以使用 Activity 生命周期方法做任何您想做的事情。