由于某种原因未调用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);
}
}
这是清单中的声明(应用程序的子代)
<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
答案 0 :(得分:7)
如果您一直想听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
。
答案 1 :(得分:0)
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);