Hi all,

I would like to know what are the main differences between TelephonyManager
and PhoneStateListener, because you can do (more or less) the same things
with both.
For example, you could create an incoming calls register implementing a
broadcastreceiver and using TelephonyManger API or extending
PhoneStateListener class and registering this new listener
throughTelephonyManager .

Case 1 - BroadcastReceiver (TelephonyManager)

public class TestServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
       TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
               int state = telephony.getCallState();
       switch(state) {
       case TelephonyManager.CALL_STATE_IDLE:
           Log.d("TestServiceReceiver", "IDLE");
           break;
       case TelephonyManager.CALL_STATE_OFFHOOK:
           Log.d("TestServiceReceiver", "OFFHOOK");
           break;
       case TelephonyManager.CALL_STATE_RINGING:
           Log.d("TestServiceReceiver", "RINGING");
           break;
    }
}
}

<receiver android:name=".TestServiceReceiver">
    <intent-filter>
       <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Case 2 - PhoneStateListener

public class TestServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
       TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
               TestPhoneStateListener listener =
new TestPhoneStateListener();
               telephony.listen(phoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
}

public class TestPhoneStateListener extends PhoneStateListener {
        public void onCallStateChanged(int state,String incomingNumber){
       switch(state) {
       case TelephonyManager.CALL_STATE_IDLE:
           Log.d("TestPhoneStateListener ", "IDLE");
           break;
       case TelephonyManager.CALL_STATE_OFFHOOK:
           Log.d("TestPhoneStateListener ", "OFFHOOK");
           break;
       case TelephonyManager.CALL_STATE_RINGING:
           Log.d("TestPhoneStateListener ", "RINGING");
           break;
    }
}
}

<receiver android:name=".TestServiceReceiver">
    <intent-filter>
       <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

In case 2, when the phone state changed, a new testphonestatelistener will
be registered (telephony.listen(phoneListener,
PhoneStateListener.LISTEN_CALL_STATE)), but I could solve this problem
convertingthe TestPhoneStateListener into a Singleton and
using PhoneStateListener listener = TestPhoneStateListener().getInstance()
instead TestPhoneStateListener listener = new TestPhoneStateListener().


So my main question is when I have to use each one and for what purposes.

Thanks and regards!

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to