Unterstützung für Anruf-Apps von Drittanbietern

Android 9 bietet APIs, um Drittanbieter-Anruf-Apps besser zu unterstützen. Drittanbieter-Anruf-Apps basieren in der Regel auf Telefonie-APIs wie dem PHONE_STATE-Broadcast, um neben Anrufen von Mobilfunkanbietern zu funktionieren. Daher müssen Drittanbieter-Anruf-Apps Anrufe über Mobilfunkanbieter priorisieren und eingehende Anrufe in der App oft stumm ablehnen oder einen laufenden Anruf beenden, um Platz für einen Anruf über den Mobilfunkanbieter zu schaffen.

Die APIs in Android 9 unterstützen Szenarien mit gleichzeitigen Anrufen zwischen Drittanbieter-Apps und Anrufen über Mobilfunkanbieter. So ist es beispielsweise möglich, während eines Anrufs über den Mobilfunkanbieter einen eingehenden Anruf von einem Drittanbieter entgegenzunehmen. Das Framework ist dafür verantwortlich, dass der Anruf des Mobilfunkanbieters stattfindet, wenn der Nutzer den Drittanbieteranruf annimmt.

In Android 9 wird Drittanbieter-Anruf-Apps empfohlen, die selbstverwaltete ConnectionService API zu implementieren. Weitere Informationen zum Erstellen einer Anruf-App mit dieser API finden Sie unter Anruf-App erstellen.

Die selbstverwaltete ConnectionService API bietet Entwicklern auch die Möglichkeit, Anrufe in ihrer App im Systemanrufprotokoll protokollieren zu lassen (siehe EXTRA_LOG_SELF_MANAGED_CALLS). Gemäß den Anforderungen im Android Compatibility Definition Document (CDD) (Abschnitt 7.4.1.2) sollten Sie dafür sorgen, dass Ihre Dialer- oder Telefon-App diese Anrufprotokolleinträge anzeigt und den Namen der Drittanbieter-Anruf-App angibt, aus der der Anruf stammt (ein Beispiel dafür, wie die AOSP-Dialer-App diese Anforderung erfüllt, finden Sie unter Anrufprotokolleinträge von Drittanbieter-Anruf-Apps).

Apps sind dafür verantwortlich, CAPABILITY_SUPPORT_HOLD und CAPABILITY_HOLD für die Verbindungen ihrer Apps festzulegen. Es ist jedoch möglich, dass eine App unter bestimmten Umständen keinen Anruf halten kann. Das Framework enthält Bestimmungen zur Lösung dieser Arten von Fällen.

Szenarien

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

Eingehende Anrufe verarbeiten, die einen laufenden Anruf trennen

In einem Szenario, in dem ein laufender Drittanbieteranruf (z. B. in einem SuperCaller-Anruf) stattfindet, der das Halten nicht unterstützt, und der Nutzer einen Mobilfunkanruf erhält (z. B. über seinen Mobilfunkanbieter FooCom), sollte Ihre Dialer- oder Telefon App dem Nutzer anzeigen, dass durch das Annehmen des Mobilfunkanrufs der laufende Drittanbieteranruf beendet wird.

Diese Nutzererfahrung ist wichtig, da eine Drittanbieter-Anrufanwendung möglicherweise einen laufenden Anruf hat, der nicht vom Framework gehalten werden kann. Wenn Sie einen neuen Mobilanruf annehmen, wird der laufende Drittanbieteranruf beendet.

Ein Beispiel für die Benutzeroberfläche finden Sie in der Abbildung:

Eingehender Anruf unterbricht laufenden Drittanbieteranruf

Abbildung 1: Ein eingehender Anruf unterbricht einen laufenden Drittanbieteranruf.

Ihre Dialer-App kann prüfen, ob ein eingehender Anruf dazu führt, dass ein anderer Anruf getrennt wird. Dazu muss sie die Anruferweiterungen prüfen. Prüfen Sie, ob EXTRA_ANSWERING_DROPS_FG_CALL auf TRUE und EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME auf den Namen der App festgelegt ist, deren Anruf beim Annehmen des eingehenden Mobilanrufs getrennt wird.

Anruflisteinträge von Drittanbieter-Anruf-Apps

Entwickler von Drittanbieter-Anruf-Apps können festlegen, dass Anrufe in ihrer App im Systemanruflistenprotokoll erfasst werden (siehe EXTRA_LOG_SELF_MANAGED_CALLS). Das bedeutet, dass Einträge in der Anrufliste möglicherweise nicht für Mobilfunknetz-Anrufe gelten.

Wenn in der AOSP-Wähl-App Anruflisteinträge für eine Drittanbieter-Anruf-App angezeigt werden, wird der Name der App, in der der Anruf stattgefunden hat, in der Anrufliste angezeigt, wie in der Abbildung dargestellt:

Anruflisteintrag mit Drittanbieter-Anruf-App

Abbildung 2: Anruflisteneintrag mit dem Namen der Drittanbieter-Anruf-App in der Dialer App.

Um den Namen einer App zu ermitteln, die einem Anruflogeintrag zugeordnet ist, verwenden Sie die Spalten PHONE_ACCOUNT_COMPONENT_NAME und PHONE_ACCOUNT_ID im Anrufloganbieter, um eine Instanz von PhoneAccountHandle zu erstellen, die die Quelle eines Anruflogeintrags identifiziert. Fragen Sie TelecomManager ab, um die Details für das PhoneAccount zu erhalten.
Wenn Sie feststellen möchten, ob ein Anruflisteneintrag von einer Drittanbieter-Anruf-App stammt, prüfen Sie die PhoneAccount-Funktionen , um zu sehen, ob CAPABILITY_SELF_MANAGED festgelegt ist.

Die Methode getLabel des zurückgegebenen PhoneAccount gibt den Namen der App zurück, die einem Anruflisteneintrag aus der Drittanbieter-Anruf-App zugeordnet ist.

Zertifizierungsstufe

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

  1. Erstellen Sie die Test-App über das Stammverzeichnis Ihres Android-Quellcode-Repositorys mit folgendem Befehl:

    mmma packages/services/Telecomm/testapps/

  2. Installieren Sie die Build-APK mit adb install -g -r <apk path>. Dem Launcher wird dann ein Symbol für das selbstverwaltete Beispiel hinzugefügt.

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

Eingehende Anrufe verarbeiten, die einen laufenden Anruf trennen

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

App für Drittanbieter-Apps testen

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

  1. Entfernen Sie das Häkchen bei der Option Holdable (Zurückbehalten).
  2. Tippen Sie auf AUSGEHEND, um einen neuen ausgehenden 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. Dadurch wird das Szenario aufgerufen, in dem Ihr Dialer den Namen einer App erhält, deren Anruf getrennt wird.
  5. Wenn Sie fertig sind, tippen Sie in der Test-App auf die Schaltfläche VERBINDUNG TRENNEN.

Anruflisteinträge von Drittanbieter-Anruf-Apps

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