为什么onReceive不被称为扩展BroadcastReceiver在Android



由于某种原因,onReceive方法没有被调用
我没有使用任何滤镜,

下面是类:

import java.util.ArrayList;
import java.util.Calendar;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.util.Log;
public class RegisterListener extends BroadcastReceiver {
private final int DELAY_TIME = 5;
private int m_seconds = 0;
private int m_minutes = 0;
private int m_hours   = 0;
static ArrayList<BroadcastReceiverListener> listeners = new ArrayList<BroadcastReceiverListener>();
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("ScreenReceiver Action:",intent.getAction());
    Calendar c = Calendar.getInstance(); 
    m_seconds = c.get(Calendar.SECOND);
    m_minutes = c.get(Calendar.MINUTE);
    m_hours = c.get(Calendar.HOUR);
    for (BroadcastReceiverListener listener:listeners){
           listener.onReceive(m_hours, m_minutes, m_seconds);
        }
}

public static void addBroadcastReceiveListener (BroadcastReceiverListener listener){
    if(!listeners.contains(listener)){
        listeners.add(listener);
    }
}
public void removeBroadcastReceiveListener (BroadcastReceiverListener listener){
    if(listeners.contains(listener)){
        listeners.remove(listener);
    }
}

下面是manifest (Application的子组件)

中的声明
<receiver android:name=".RegisterListener"></receiver>

编辑: 这是我试图添加的过滤器(在onReceive()中)

    IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
    BroadcastReceiver mReceiver = new RegisterListener();
    registerReceiver(mReceiver, filter);

我得到一个错误:

The method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for the type RegisterListener

如果您总是想要监听ACTION_USER_PRESENT,请尝试:

<receiver android:name=".RegisterListener">
    <intent-filter>
        <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
</receiver>

The method registerReceiver(BroadcastReceiver, IntentFilter) is undefined for the type RegisterListener

必须带上下文使用registerReceiver(),例如context.registerReceiver(...)但是:

这是我试图添加的过滤器(在onReceive()中)

onReceive()内注册接收器是没有意义的,因为onReceive()将不会运行,直到您注册了接收器…所以这永远不会发生。你可以把这段代码在onCreate()在你的活动,像这样:

IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
BroadcastReceiver mReceiver = new RegisterListener();
registerReceiver(mReceiver, filter);

这只会在你的应用程序已经运行时监听ACTION_USER_PRESENT

IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BROADCAST_STARTED_ACTION);
        intentFilter.addAction(BROADCAST_SUCCESS_ACTION);
        intentFilter.addAction(BROADCAST_FAILURE_ACTION);
        LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(broadCastReceiver, intentFilter);

最新更新