我的 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 生命周期方法做任何您想做的事情。
在 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 生命周期方法做任何您想做的事情。