在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);
}
}
我试图在关闭后运行应用程序以在后台播放音乐。
答案 0 :(得分:2)
那是因为你从未指定你实际上正在倾听的意图。
您需要注册广播接收器以使用intent-filter tag在清单中或在运行时动态地侦听特定广播(事件)。有关差异的更多讨论,请参阅this question。
以下是如何在清单(来自链接问题)中执行此操作的示例:
<receiver android:name="TestReceiver">
<intent-filter>
<action android:name="android.media.AUDIO_BECOMING_NOISY"/>
</intent-filter>
</receiver>
这意味着广播接收器正在侦听AUDIO_BECOMING_NOISY意图。 (您需要用更合适的意图替换它,以反映您希望它运行的时间。)
有一个非常有用的意图列表,你可以听here。您可以从那里(或从其中一个库)选择广播,或者,如果您正在侦听应用程序中发生的事件,您可以自己发布广播。
此外,请确保实际引发相关事件。如果您正在收听的广播从未发生过,广播接收器将永远不会被触发。
有关相关阅读,请参阅Observer Pattern(这是Android广播接收器实施的设计模式)。
答案 1 :(得分:1)
onReceive()方法。您尚未声明将触发onReceive()方法的事件。因此,广播接收器不知道它应该听什么。
您应该从Android文档中了解有关广播接收器和活动生命周期方法的更多信息。
这类似于要求X(任何人)从市场上获取________。他在市场上寻找________,但他不知道它是什么。所以,显然,他无法为你得到它。你需要告诉接收者要找什么。
答案 2 :(得分:1)
onReceive()
方法。您尚未声明将触发onReceive()
方法的事件。因此,广播接收器不知道它应该听什么。
您应该从Android文档中了解有关广播接收器和活动生命周期方法的更多信息。
我认为您不需要使用广播接收器。您可以使用Activity生命周期方法在应用程序关闭时执行任何操作。