繁体   English   中英

自定义侦听器未注册

[英]Custom listener is not registered

我有一个实现自定义CallReceiver.ListenerMyService类。 问题是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM