Unterstützung von Anruf-Apps von Drittanbietern

Android 9 bietet APIs zur besseren Unterstützung von Anruf-Apps von Drittanbietern. Anruf-Apps von Drittanbietern nutzen in der Regel Telefonie-APIs wie die PHONE_STATE-Broadcasts, um neben Anrufen von Mobilfunkanbietern zu existieren. Daher müssen Anruf-Apps von Drittanbietern Anrufe von Mobilfunkanbietern priorisieren und eingehende Anrufe in der App häufig stumm ablehnen oder einen laufenden Anruf beenden, um Platz für einen Anruf von einem Mobilfunkanbieter zu schaffen.

Die APIs in Android 9 unterstützen gleichzeitige Anrufe zwischen Drittanbieter-Apps und Anrufen von Mobilfunkanbietern. So ist es beispielsweise möglich, einen eingehenden Anruf eines Drittanbieters anzunehmen, während ein Mobilfunkanbieteranruf erfolgt. Das Framework ist dafür verantwortlich, dass der Anruf des Mobilfunkanbieters gehalten wird, wenn der Nutzer einen Anruf von einem Drittanbieter startet.

Unter Android 9 wird empfohlen, dass Anruf-Apps von Drittanbietern die selbstverwaltete ConnectionService API implementieren. Weitere Informationen zum Erstellen einer Anruf-App mit dieser API finden Sie unter Anruf-App erstellen.

Mit der selbstverwalteten ConnectionService API können Entwickler auch festlegen, dass Anrufe in ihrer App im Systemanrufprotokoll protokolliert werden (siehe EXTRA_LOG_SELF_MANAGED_CALLS). Gemäß den Anforderungen im Android Compatibility Definition Document (CDD) (Abschnitt 7.4.1.2) müssen Sie dafür sorgen, dass Ihre Telefon- oder Anrufer-App diese Anrufprotokolleinträge und den Namen der Anrufer-App eines Drittanbieters anzeigt, über die der Anruf gestartet wurde. Ein Beispiel dafür, wie die AOSP-Telefon-App diese Anforderung erfüllt, finden Sie unter Anrufprotokolleinträge von Anrufer-Apps von Drittanbietern.

Entwickler sind dafür verantwortlich, CAPABILITY_SUPPORT_HOLD und CAPABILITY_HOLD für die Verbindungen ihrer Apps festzulegen. Es kann jedoch sein, dass eine App in bestimmten Fällen keinen Anruf halten kann. Das Rahmenwerk enthält Bestimmungen zur Lösung dieser Art von Fällen.

Szenarien

Sie sollten Ihre Telefonanruf-App so anpassen, dass sie die folgenden Szenarien abdeckt.

Eingehende Anrufe bearbeiten, die einen laufenden Anruf trennen

Wenn ein Anruf eines Drittanbieters (z. B. ein SuperCaller-Anruf) läuft, der die Funktion „Anruf pausieren“ nicht unterstützt, und der Nutzer einen Anruf über sein Mobilfunknetz erhält (z. B. über seinen Mobilfunkanbieter FooCom), sollte die Telefon-App dem Nutzer anzeigen, dass der laufende Anruf des Drittanbieters beendet wird, wenn er den Anruf des Mobilfunknetzes annimmt.

Diese Nutzererfahrung ist wichtig, da in einer Anruf-App eines Drittanbieters möglicherweise ein laufendes Gespräch besteht, das vom Framework nicht gehalten werden kann. Wenn Sie einen neuen Anruf auf Ihrem Smartphone annehmen, wird die Verbindung zum laufenden Anruf eines Drittanbieters getrennt.

In der Abbildung ist ein Beispiel für die Benutzeroberfläche zu sehen:

Eingehender Anruf trennt die Verbindung zu einem laufenden Drittanbieteranruf

Abbildung 1. Eingehender Anruf, durch den ein laufender Anruf eines Drittanbieters getrennt wird

Ihre Telefon-App kann anhand der Anrufextras prüfen, ob ein eingehender Anruf zur Trennung eines anderen Anrufs führt. Achten Sie darauf, dass für EXTRA_ANSWERING_DROPS_FG_CALL der Wert TRUE und für EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME der Name der App festgelegt ist, deren Anruf getrennt wird, wenn der eingehende mobile Anruf angenommen wird.

Anruflisteneinträge aus Anruf-Apps von Drittanbietern

Entwickler von Anruf-Apps von Drittanbietern können festlegen, dass Anrufe in ihrer App im Systemanrufprotokoll protokolliert werden (siehe EXTRA_LOG_SELF_MANAGED_CALLS). Das bedeutet, dass es Einträge in der Anrufliste geben kann, die nicht für Anrufe über das Mobilfunknetz sind.

Wenn die AOSP-Anrufer-App Anruflisteneinträge zu einer Anruf-App von Drittanbietern anzeigt, wird im Anrufprotokoll der Name der App angezeigt, über die der Anruf stattgefunden hat, wie in der Abbildung dargestellt:

Eintrag im Anrufprotokoll mit einer Anruf-App von Drittanbietern

Abbildung 2: Eintrag im Anrufprotokoll mit dem Namen der Anruf-App eines Drittanbieters in der Telefon-App

Wenn Sie den Namen einer App ermitteln möchten, die mit einem Anruflisteneintrag verknüpft ist, verwenden Sie die Spalten PHONE_ACCOUNT_COMPONENT_NAME und PHONE_ACCOUNT_ID im Anruflistenanbieter, um eine Instanz von PhoneAccountHandle zu erstellen, die die Quelle eines Anruflisteneintrags angibt. Rufen Sie TelecomManager ab, um die Details für das PhoneAccount abzurufen.
Um festzustellen, ob ein Anruflisteneintrag von einer Anruf-App eines Drittanbieters stammt, prüfen Sie unter PhoneAccount-Funktionen , ob CAPABILITY_SELF_MANAGED festgelegt ist.

Die Methode getLabel des zurückgegebenen PhoneAccount gibt den Namen der App zurück, die mit einem Anruflisteneintrag aus der Anruf-App des Drittanbieters verknüpft ist.

Zertifizierungsstufe

Mit der Telecomm-Test-App, in der die selbstverwaltete ConnectionService API implementiert ist, können Sie testen, ob Ihr Gerät Anruf-Apps von Drittanbietern unterstützt. Die App befindet sich unter /packages/services/Telecomm/testapps/.

  1. Erstellen Sie die Test-App aus dem Stammverzeichnis Ihres Android-Quell-Repositorys mithilfe von:

    mmma packages/services/Telecomm/testapps/

  2. Installieren Sie die Build-APK mit adb install -g -r <apk path>. Ihrem Launcher wird dann ein Symbol für selbst verwaltete Samples hinzugefügt.

  3. Tippe auf das Symbol, um die Test-App zu öffnen.

Umgang mit eingehenden Anrufen, die einen laufenden Anruf beenden

Führen Sie die folgenden Schritte aus, um zu prüfen, ob ein eingehender Anruf einen laufenden Anruf von einem Drittanbieter beendet.

Test-App für Anruf-Apps von Drittanbietern

Abbildung 3: Testen Sie die App mit Beispielimplementierungen der ConnectionService API.

  1. Entfernen Sie das Häkchen bei Holdable (Anhaltbar).
  2. Tippen Sie auf AUSGABEN, um einen neuen Beispielanruf zu starten.
  3. Tippen Sie auf die Schaltfläche AKTIV, um den Anruf zu aktivieren.
  4. Rufen Sie die Telefonnummer des zu testenden Geräts mit einem anderen Smartphone an. Dies löst das Szenario aus, in dem Ihrem Telefon der Name einer App bereitgestellt wird, wodurch der Anruf getrennt wird.
  5. Wenn Sie fertig sind, tippen Sie in der Test-App auf die Schaltfläche VERBINDUNG AUFHEBEN.

Anruflisteneinträge aus Anruf-Apps von Drittanbietern

Nachdem Sie die oben genannten Schritte ausgeführt haben, sollte die Test-App einen Anruf im Systemanrufprotokoll protokolliert haben. Wenn Sie prüfen möchten, ob das Gerät Anrufe von Anruf-Apps von Drittanbietern protokolliert, öffnen Sie die Telefon-App und prüfen Sie, ob der Anruf im Systemanrufprotokoll angezeigt wird.