Unterstützung für Anruf-Apps von Drittanbietern

Android 9 bietet APIs zur besseren Unterstützung von Anruf-Apps von Drittanbietern. Anruf-Apps von Drittanbietern verwenden in der Regel Telefonie-APIs wie die Broadcast-Nachricht PHONE_STATE, um neben Anrufen über Mobilfunkanbieter zu funktionieren. Daher müssen Anruf-Apps von Drittanbietern Anrufen über Mobilfunkanbieter Priorität einräumen 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, einen eingehenden Anruf von einem Drittanbieter zu empfangen, während Sie einen Anruf über den Mobilfunkanbieter führen. Das Framework sorgt dafür, dass der Anruf über den Mobilfunkanbieter gehalten wird, wenn der Nutzer den Anruf über den Drittanbieter annimmt.

In 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) sollten Sie dafür sorgen, dass in Ihrer Dialer- oder Telefon-App diese Anrufprotokolleinträge angezeigt werden und der Name der Anruf-App des Drittanbieters, von der der Anruf stammt, zu sehen ist. Ein Beispiel dafür, wie die AOSP-Dialer-App diese Anforderung erfüllt, finden Sie unter Anrufprotokolleinträge von Anruf-Apps von Drittanbietern.

Apps müssen CAPABILITY_SUPPORT_HOLD und CAPABILITY_HOLD für die Verbindungen ihrer Apps festlegen. Es ist jedoch möglich, dass eine App unter bestimmten Umständen einen Anruf nicht halten kann. Das Framework enthält Bestimmungen zur Lösung dieser Fälle.

Szenarien

Sie sollten Ihre Dialer-App so ändern, dass die folgenden Szenarien verarbeitet werden.

Eingehende Anrufe verarbeiten, die einen laufenden Anruf beenden

In einem Szenario, in dem ein laufender Anruf über einen Drittanbieter (z. B. ein SuperCaller-Anruf) geführt wird, der das Halten nicht unterstützt, und der Nutzer einen Mobilanruf erhält (z. B. über seinen Mobilfunkanbieter FooCom), sollte Ihre Dialer- oder Telefon-App dem Nutzer mitteilen, dass durch die Annahme des Mobilanrufs der laufende Anruf über den Drittanbieter beendet wird.

Diese Nutzererfahrung ist wichtig, da bei einem Anruf über eine Anruf-App eines Drittanbieters ein laufender Anruf geführt werden kann, der vom Framework nicht gehalten werden kann. Wenn ein neuer Mobilanruf angenommen wird, wird der laufende Anruf über den Drittanbieter beendet.

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

Eingehender Anruf unterbricht laufenden Drittanbieteranruf

Abbildung 1 : Eingehender Anruf beendet einen laufenden Anruf über einen Drittanbieter.

Ihre Dialer-App kann prüfen, ob ein eingehender Anruf dazu führt, dass ein anderer Anruf be endet wird. Dazu müssen Sie die Anruf-Extras prüfen. Achten Sie darauf, dass 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 beendet wird.

Anrufprotokolleinträge von 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 im Anrufprotokoll geben kann, die nicht für Mobilanrufe gelten.

Wenn in der AOSP-Dialer-App Anrufprotokolleinträge zu einer Anruf-App eines Drittanbieters angezeigt werden, wird der Name der App, in der der Anruf stattgefunden hat, im Anrufprotokoll angezeigt, wie in der Abbildung dargestellt:

Logeintrag der Anrufliste mit Anruf-App eines Drittanbieters

Abbildung 2 : Anruf-Logeintrag mit dem Namen der Anruf-App des Drittanbieters in der Telefon-App.

Verwenden Sie die PHONE_ACCOUNT_COMPONENT_NAME und PHONE_ACCOUNT_ID Spalten im Anrufprotokollanbieter, um den Namen einer App zu ermitteln, die mit einem Anrufprotokolleintrag verknüpft ist. Erstellen Sie dazu eine Instanz von PhoneAccountHandle, die die Quelle eines Anrufprotokolleintrags identifiziert. Fragen Sie TelecomManager ab, um die Details für das PhoneAccount zu erhalten.
Prüfen Sie die PhoneAccount Funktionen , um festzustellen, ob ein Anrufprotokolleintrag von einer Anruf-App eines Drittanbieters stammt. Sehen Sie dazu nach, ob CAPABILITY_SELF_MANAGED festgelegt ist.

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

Validierung

Verwenden Sie die Telecomm-Test-App, die die selbstverwaltete ConnectionService API implementiert, um zu 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 mit folgendem Befehl:

    mmma packages/services/Telecomm/testapps/

  2. Installieren Sie die erstellte APK-Datei mit adb install -g -r <apk path>. Ihrem Launcher wird dann ein Symbol für die selbstverwaltete Beispiel-App hinzugefügt.

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

Eingehende Anrufe verarbeiten, die einen laufenden Anruf beenden

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

App für Anruf-Apps von Drittanbietern testen

Abbildung 3 : Test-App mit Beispielimplementierungen der ConnectionService API.

  1. Deaktivieren Sie die Option Holdable.
  2. Tippen Sie auf OUTGOING , um einen neuen ausgehenden Beispielanruf zu starten.
  3. Tippen Sie auf die Schaltfläche ACTIVE , um den Anruf zu aktivieren.
  4. Rufen Sie die Telefonnummer des zu testenden Geräts mit einem anderen Telefon an. Dadurch wird das Szenario ausgelöst, in dem Ihre Dialer-App den Namen einer App erhält, deren Anruf beendet wird.
  5. Wenn Sie fertig sind, tippen Sie in der Test-App auf die Schaltfläche DISCONNECT.

Anrufprotokolleinträge von Anruf-Apps von Drittanbietern

Nachdem Sie die oben genannten Schritte ausgeführt haben, sollte die Test-App einen Anruf im Systemanrufprotokoll protokolliert haben. Öffnen Sie Ihre Dialer-App und prüfen Sie, ob der Anruf im Systemanrufprotokoll angezeigt wird, um zu bestätigen, dass das Gerät Anrufe von Anruf-Apps von Drittanbietern protokolliert.