2014-05-23 2 views
0

Je développe une application android pour un examen universitaire.
J'utilise un Samsung Galaxy S3 avec ROM originale, Android Jelly Bean 4.3.Comment gérer les états d'un appel sortant sous Android?

J'ai un problème avec la détection des "états" d'un appel sortant.
J'ai besoin de savoir quand l'appel téléphonique "démarre" à partir de mon application et "stop" (rejeté ou non) parce que je dois mettre en pause et redémarrer le morceau en cours de lecture d'un service de musique.

Je l'ai déjà fait avec les appels entrants et il fonctionne parfaitement ainsi:

public void onReceive(Context context, Intent intent) { 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
     if (Start.getMusicService().isPlaying()) { 
      pauseService(); 

      isMusicPlaying = true; 
     } 
    } 
    else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
     if (isMusicPlaying){ 
      startService(); 

      isMusicPlaying = false; 
     } 
    } 
} 

Pour les appels sortants i enregistrer le récepteur dans le

manifeste
<receiver android:name=".Music.OutgoingCallReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     </intent-filter> 
    </receiver> 

et ajoutez l'autorisation

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

J'ai essayé cette solution pour le récepteur

public void onReceive(Context context, Intent intent) { 
    TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
    telephonyManager.listen(new PhoneStateListener() { 
     public void onCallStateChanged(int state, String number) { 

      if (state == TelephonyManager.CALL_STATE_IDLE) { 
       if (Start.getMusicService().isPlaying()) { 
        pauseService(); 

        isMusicPlaying = true; 
       } 
      } 
      else if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
       if (isMusicPlaying){ 
        startService(); 

        isMusicPlaying = false; 
       } 
      } 
     } 
    }, PhoneStateListener.LISTEN_CALL_STATE); 
} 

J'ai déjà lu d'autres questions acheter je n'ai pas trouvé la réponse.
J'espère que vous pouvez m'aider.

Andrea

+0

onReceive n'est pas appelé du tout? Comment avez-vous mis en place le BroadcastReceiver? – Rarw

+0

@Rarw je modifie ma question avec la méthode onReceive. Il est appelé correctement à chaque fois mais dans la méthode je ne suis pas capable de faire ce dont j'ai besoin – andrea92

+0

Si vous voulez juste moduler le volume de votre application quand il y a un appel, vous pouvez également utiliser le focus audio: https://developer.android.com/training/managing-audio/audio-focus.html –

Répondre

0

procédure make pour lire logcat de la radio, commande :

logcat -d -b radio RILJ:D RILC:D *:S 

mine sur Android 2.3, quand faire appel sortant a sortie:

06-11 20:38:43.051 D/RILJ ( 429): [4678]< GET_CURRENT_CALLS [id=1,ALERTING,toa=145,norm,mo,0,voc,noevp,,cli=1,,1] 

et quand répondu a sortie:

06-11 20:38:50.300 D/RILJ ( 429): [4683]< GET_CURRENT_CALLS [id=1,ACTIVE,toa=145,norm,mo,0,voc,noevp,,cli=1,,1] 

donc, pour détecter wether outgoingcall répond, me faire procédure pour capturer les journaux et vérifier si elle

contain time > time-when-make-outgoing-call, and 
contains string "GET_CURRENT_CALLS" and "ACTIVE". 

et ... ça marche, pour moi-sonyericsson android 2.3.

Je ne sais pas si cela fonctionne sur d'autres appareils et la version Android, vous me dites.

+0

Comment écrire du code java pour le concept ci-dessus qui peut être utilisé dans l'application Android elle-même? –

Questions connexes