web-dev-qa-db-fra.com

Comment savoir si je suis en communication sur Android?

Je veux savoir si je suis en communication.

Si je suis en communication, démarrez le service (la partie service est claire). Comment puis-je faire cela?

Lorsque je participe à l'appel, je dois appeler le service ... Je ne sais pas comment procéder? De l'aide?

32
Rockin

Vous avez besoin d'un récepteur de diffusion ...

Dans le manifeste, déclarez le récepteur de diffusion ...

<receiver Android:name=".PhoneStateBroadcastReceiver">
        <intent-filter>
                <action Android:name="Android.intent.action.PHONE_STATE"/>     
        </intent-filter>
</receiver>

Déclarez également les autorisations d'utilisation ...

<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />  

La classe des récepteurs de diffusion ...

package x.y;

import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);

    }

}

Et une classe pour personnaliser l'écouteur de l'état du téléphone ...

package x.y;
import Android.content.Context;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;

public class CustomPhoneStateListener extends PhoneStateListener {

    //private static final String TAG = "PhoneStateChanged";
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) {
        super();
        this.context = context;
    }

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

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            //when Idle i.e no call
            Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show();
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            //when Off hook i.e in call
            //Make intent and start your service here
            Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show();
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            //when Ringing
            Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show();
            break;
        default:
            break;
        }
    }
}
55
Vaibhav Jani

TelephonyManager.getCallState() renvoie l'un des

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

Si cela correspond à vos besoins, c'est beaucoup moins de code que la solution plus complète de Pied Piper.

29
Adam

Vous pouvez seulement savoir que l'appel arrive, mais vous ne pouvez pas le modifier. :( voir ceci pourquoi la version 2.3 de Android n'a pas Android.permission.MODIFY_PHONE_STATE? et quelle est la solution pour cela?

1
Dhrupal