我的Android广播接收器永远不会被触发

时间:2017-04-19 20:30:35

标签: android broadcastreceiver broadcast android-broadcast android-broadcastreceiver

在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);
    }
}

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

3 个答案:

答案 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生命周期方法在应用程序关闭时执行任何操作。