由于某种原因未调用onReceive方法
我没有应用任何过滤器或其他任何东西,

这是类(class):

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

这是 list 中的声明(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()不会运行...因此永远不会发生。您可以将以下代码放在“Activity ”中的onCreate()中,如下所示:
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
BroadcastReceiver mReceiver = new RegisterListener();
registerReceiver(mReceiver, filter);

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

关于android - 为什么onReceive在Android中不称为扩展BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15706537/

10-10 10:35