I think you have lost sight of the forest for the trees. The main
difference is that the Listener is just that -- a Listener. If you
don't use the Listener, you have to poll for changes in phone state or
create a Receiver. Often, this is a waste of time. The Listener should
be preferred, unless your needs are VERY simple, so that you can
afford the waste of time implied by polling for state change, or the
extra effort (as in your example) of making a whole Receiver.

After all: except when it introduces nuisance complexity, fewer
application components is better. It is rare that you would want to
create a whole Receiver just for tracking phone state. Why bother,
when you can use a Listener?

Besides: how do you plan to communicate between your Receiver and your
Activities? Generally, communicating with a Listener in the same
Activity or in the hosting process's thread is easier. You didn't even
try this communication in your example.

On Sep 7, 1:09 am, KrcK --- <krc...@gmail.com> wrote:
> 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