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?
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;
}
}
}
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.
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?