web-dev-qa-db-fra.com

Pourquoi il n'est pas possible de lire un fichier audio lors d'un appel vocal sous Android

Cette question peut sembler être une répétition des questions suivantes:
Comment lire un fichier audio lors d'un appel vocal sous Android
Audio de fond pour un appel en cours - Possible?

Les réponses à ces questions suggèrent qu'il n'est pas possible de lire un fichier audio préenregistré sur un appel vocal sous Android. Je veux savoir pourquoi ce n'est pas possible? Quelle est la limitation (matériel/logiciel)? Est-ce vraiment une limitation ou faite à dessein? Pouvons-nous modifier le code source d'Android pour le rendre possible? 

21
Falak

Après des recherches approfondies, ce que j’ai appris, c’est qu’il existe plus d’une limitation/barrière pour rendre cela possible. Ces limitations/obstacles sont à trois niveaux différents. 

Première limitation est au niveau de l'API, car il n'y a pas d'API de haut niveau pour lire des fichiers audio dans l'audio de conversation pendant un appel, comme indiqué dans Documentation officielle Android

Deuxième limitation est au niveau de la couche d’interface radio (RIL). RIL transmet le contrôle complet de l'appel à Radio Daemon (rild) de la bibliothèque Linux, qui le transmet ensuite au fournisseur RIL. Cela signifie que nous ne pouvons pas manipuler les appels vocaux dans le code source Android. 

Même si nous sommes en mesure de supprimer ces deux limitations, il se peut que nous ne puissions toujours pas lire de fichier audio dans un appel vocal en cours. Parce qu'il y a une troisième limitation . Chaque fournisseur a sa propre bibliothèque RIL qui communique avec Radio Daemon (rild). Cela nécessite que le fournisseur RIL soit open source, ce qui n'est pas le cas. Les fournisseurs de matériel ne communiquent généralement pas leur code de pilote de périphérique. 

Une discussion détaillée sur ce sujet est présente sur ce lien .

10
Falak

Je pense que ceci est une limitation , imposée pour des raisons de sécurité et restreinte au niveau du système d'exploitation.

Analysons tout d’abord la menace à la sécurité. Si vous parveniez à lire des fichiers audio personnalisés sur l'appelé, vous ouvrez tout un monde d'inconvénients: vous pourriez tromper le support client, vous pourriez prétendre être quelqu'un d'autre, vous pourriez donner des confirmations d'achat non autorisées, etc. sur. Pour cette raison, ni Android ni iOS n'autorisent cette fonctionnalité.

Sur Android, vous ne pourrez pas le faire de manière programmatique, tout simplement parce que les API actuelles ne vous permettent pas de le faire . Il est également indiqué dans la documentation officielle, comme indiqué ici . Si vous creusez dans le code source, vous pourrez probablement activer cette fonctionnalité en accédant à la sortie microphone pendant un appel téléphonique, mais cela nécessiterait l'exécution de votre version personnalisée d'Android. Un bon point de départ serait la source AudioTrack, disponible ici .


EDIT: un bon exemple de mod audio consiste à activer l’écouteur Nexus 5 en tant que deuxième haut-parleur (nécessite une racine). Peut être trouvé ici .

14
Sebastiano

Ceci est lié au logiciel en raison de la priorité donnée au routage audio dans Android. Consultez le CallManager où vous pouvez accéder à la méthode setAudioMode(). Une fois que le mode audio a été défini sur MODE_IN_COMMUNICATION, le code suivant est appelé.

audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL,
                        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

À partir de ce moment, le service de téléphonie a la priorité la plus haute et ne permet à aucun autre audio de jouer en parallèle.

4
clash

Remarque: Vous pouvez lire les données audio uniquement sur le périphérique de sortie standard. Actuellement, il s’agit du haut-parleur de l’appareil mobile ou d’un casque Bluetooth. Vous ne pouvez pas lire de fichiers audio dans le son de la conversation pendant un appel.

Voir le lien officiel http://developer.Android.com/guide/topics/media/mediaplayer.html

0
Akash

En implémentant AudioManager.OnAudioFocusChangeListener, vous pouvez obtenir l'état de audiomanager. Ainsi, si une musique joue en arrière-plan, vous pouvez obtenir les états AudioManager (la lecture et la pause sont entièrement entre les mains du développeur) de manière similaire ......

Certains des lecteurs de musique natifs dans les appareils Android où ils gèrent cela, restreignent la musique lorsque l'appel est dans TelephonyManager.EXTRA_STATE_OFFHOOK.so ce scénario est aussi complètement dans la main du développeur (s'il doit gérer ou non) s'il ne gère pas les deux jouera en parallèle y

0
KomalG