Alex Rivera | Logout

Service and a BroadCastReceiver

Asked 2010-06-02T14:47:04.080
9

I have seen several examples of how to implement a BroadCastReceiver, but how should I implement a Service that has to react to some pending Intent (for example incoming phone call)... Actually I was wondering about the same "problem" but in an Activity.. You obviously have a class which extends a Service or an Activity) so it cannot also extend BroadCastReceiver... It looks like we cannot make "platform-aware" services and/or Activties?

Edit
Report

2 Answers

4

you can create an inner class

class A extends Activity {
 BroadcastReceiver r = new BroadcastReceiver(){
   // code to handle broadcase
 }
}

that class will receive events, which you can pass to main handler, or just call some outer methods

answered 2010-06-02T15:45:19.283
4

Actually you can react to incoming phone call just by adding listener to TelephonyManager

You define PhoneStateListener in your Service/Activity

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);

        switch (state) {
        case TelephonyManager.CALL_STATE_OFFHOOK:
                     break;
        case TelephonyManager.CALL_STATE_RINGING:
                     break;
        case TelephonyManager.CALL_STATE_IDLE:
                     break;
        }
    }

};

Then in onCreate method:

mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Finaly you clear the listener in onDestroy:

mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);

So much simpler in this case.

answered 2011-01-27T21:53:44.560

Your Answer