2014-06-26 12 views
5

Ich habe 2 VoIP-Anwendungen, die ich entwickle, die zusammenarbeiten müssen; eine ist eine Softphone-App (App A), die verschiedene Audio-Modi wie erwartet verwendet, d. h. RINGTONE, IN_COMMUNICATION usw. Die andere App (App B) benötigt den Audio-Modus NORMAL. Ich versuche sicherzustellen, dass sie gut miteinander spielen, wenn also die Softphone-App A einen Anruf beendet, bringt sie den Audiomodus auf NORMAL zurück. Wenn App B in der Mitte von App A ausgeführt werden muss, speichert es den gefundenen Audiomodus und stellt es nach Abschluss wieder her.Android AudioManager.setMode (MODE_NORMAL) schlägt fehl

Zum Beispiel für einen eingehenden Anruf, kann App A Audio-Modi ändern wie folgt:

  1. MODE_RINGTONE wenn Anruf kommt
  2. MODE_IN_COMMUNICATION wenn Anruf verbunden ist
  3. MODE_NORMAL nach Aufruf
  4. beendet wird

Wenn App B etwas, während ein Anruf (Schritt 2) verbunden ist, tun muss, wird es

  1. speichern MODE_IN_COMMUNICATION
  2. Satz MODE_NORMAL
  3. tun, was es
  4. wiederherstellen MODE_IN_COMMUNICAITON

Beide Anwendungen erhalten die Android Audio-Manager mit ihren Anwendungskontext tun muss.

Das Problem, das ich habe, und das ich nicht verstehe, ist, dass App A, nachdem die obigen Schritte ausgeführt wurden, nicht versucht, den Audiomodus nach Beendigung des Anrufs auf NORMAL zurückzusetzen.

myAudioManagerReference.setMode(AudioManager.MODE_NORMAL); 
if (myAudioManagerReference.getMode() != AudioManager.MODE_NORMAL) 
    Log.w(CLASSTAG, "failure to set audio mode to MODE_NORMAL); 

Ist es möglich, meine App B eine Art Sperre auf dem Audio-Manager-Modus zu haben? Oder die Berechtigungen für App A so geändert haben, dass der Modus nicht wieder in NORMAL geändert werden kann? Ich habe festgestellt, dass App A den Modus erfolgreich auf NORMAL ändern kann, sobald ich App B beendet habe.

Antwort

2

Das sieht so aus, als könnte es sehr gut ein Firmware-Problem sein. Ich sehe verdächtige Protokolle vom ALSA-Treiber auf diesem Gerät (ein industrielles mobiles Gerät), das aussieht, als könnte der Treiber manchmal die falsche PID verwenden, um Änderungen im Audiomodus vorzunehmen. Ich war auch nicht in der Lage, das gleiche Problem auf einem anderen Gerät neu zu erstellen, einschließlich einiger vom gleichen Hersteller.

Leider habe ich noch keine Bestätigung vom Hersteller (und ALSA Treiberschreiber), dass dies der Fall ist.