[英]Custom listener is not registered
我有一个实现自定义CallReceiver.Listener
的MyService
类。 问题是MyService
调用的侦听器注册不起作用。 mListener
中的CallReceiver
始终为null。 它证明了监听器尚未注册,但我不知道为什么会这样。
MyService类(摘录):
public class MyService extends Service implements CallReceiver.Listener {
CallReceiver mCallReceiver;
public int onStartCommand (Intent intent, int flags, int startId) {
serviceStart();
return startId;
}
// starting service
public void serviceStart() {
mCallReceiver = new CallReceiver();
// registering listener for CallReceiver
mCallReceiver.registerListener(this);
}
public void onPhoneStateChange(boolean state) {
if (state) {
Log.v("onPhoneStateChange", "service destroyed");
serviceDestroy();
} else {
// serviceStart();
}
}
}
CallReceiver类:
public class CallReceiver extends BroadcastReceiver {
private boolean isRinging = false;
private Listener mListener = null;
// interface declaration
public interface Listener {
public void onPhoneStateChange(boolean state);
}
// listener registration
public void registerListener (Listener listener) {
mListener = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
// do something while ringing
Log.v("phone", "ringing");
isRinging = true;
}
else if(TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {
//do something when the call ends
Log.v("phone", "idle");
isRinging = false;
}
if(mListener != null) {
// onPhoneStateChange is not called because mListener is null
mListener.onPhoneStateChange(isRinging);
}
}
}
您应该动态注册接收器。
// registering listener for CallReceiver
mCallReceiver.registerListener(this);
IntentFilter filter = new IntentFilter("your.Intent");
registerReceiver (mCallReceiver, filter);
另外,在您的服务onDestroy()中,请不要忘记注销它。
@Override
public void onDestroy ()
{
try {
unregisterReceiver (broadcastReceiver);
}
catch (IllegalArgumentException e){}
catch (NullPointerException ne){}
super.onDestroy();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.