Android 9 bietet APIs zur besseren Unterstützung von Anruf-Apps von Drittanbietern (3P). 3P-Anruf-Apps sind in der Regel auf Telefonie-APIs wie die PHONE_STATE
Übertragung angewiesen, um neben Telefonanrufen des Mobilfunkanbieters koexistieren zu können. Aus diesem Grund müssen 3P-Anruf-Apps Anrufen von Netzbetreibern Vorrang einräumen und greifen häufig darauf zurück, eingehende Anrufe in der App stillschweigend abzulehnen oder einen laufenden Anruf zu beenden, um Platz für einen Anruf beim Netzbetreiber zu schaffen.
Die APIs in Android 9 unterstützen gleichzeitige Anrufszenarien zwischen 3P-Apps und Anbieteranrufen. Dadurch ist es beispielsweise möglich, einen eingehenden 3P-Anruf zu empfangen, während Sie gerade ein Telefongespräch führen. Das Framework übernimmt die Verantwortung dafür, sicherzustellen, dass der Carrier-Anruf gehalten wird, wenn der Benutzer den 3P-Anruf tätigt.
In Android 9 werden 3P-aufrufende Apps aufgefordert, die selbstverwaltete ConnectionService
API zu implementieren. Weitere Informationen zum Erstellen einer aufrufenden App mithilfe dieser API finden Sie unter Erstellen einer aufrufenden App .
Die selbstverwaltete ConnectionService
API bietet Entwicklern auch die Möglichkeit, sich dafür zu entscheiden, dass Aufrufe in ihrer App im Systemaufrufprotokoll protokolliert werden (siehe EXTRA_LOG_SELF_MANAGED_CALLS
). Gemäß den Anforderungen im Android Compatibility Definition Document (CDD) (Abschnitt 7.4.1.2) sollten Sie sicherstellen, dass Ihr Dialer/Telefon-App diese Anrufprotokolleinträge anzeigt und den Namen der 3P-Anruf-App anzeigt, von der der Anruf stammt (z. B.). Wie die AOSP-Dialer-App diese Anforderung erfüllt, finden Sie unter Anrufprotokolleinträge von 3P-Anruf-Apps .
Apps sind dafür verantwortlich, CAPABILITY_SUPPORT_HOLD
und CAPABILITY_HOLD
für die Verbindungen ihrer Apps festzulegen. Allerdings ist es möglich, dass eine App unter bestimmten Umständen einen Anruf nicht halten kann. Der Rahmen enthält Bestimmungen zur Lösung dieser Art von Fällen.
Szenarien
Sie sollten Ihre Dialer-App ändern, um die folgenden Szenarien zu bewältigen.
Bearbeitung eingehender Anrufe, die einen laufenden Anruf unterbrechen
In einem Szenario, in dem es einen laufenden 3P-Anruf gibt (z. B. bei einem SuperCaller-Anruf), der das Halten nicht unterstützt, und der Benutzer einen Mobilfunkanruf erhält (z. B. über seinen Mobilfunkanbieter FooCom), sollte Ihre Dialer-/Telefon-App dem Benutzer anzeigen, dass er antwortet Der Mobilfunkanruf beendet den laufenden 3P-Anruf.
Diese Benutzererfahrung ist wichtig, da eine 3P-Anruf-App möglicherweise einen laufenden Anruf hat, der vom Framework nicht gehalten werden kann. Das Beantworten eines neuen Mobilfunkanrufs führt dazu, dass das laufende 3P-Gespräch getrennt wird.
Ein Beispiel finden Sie in der Benutzeroberfläche unten:
![Eingehender Anruf, der ein laufendes 3P-Gespräch trennt](https://source.android.com/static/docs/core/connect/images/incoming-call-3p-call-app.png?authuser=6&hl=de)
Ihre Dialer-App kann anhand der Anruf-Extras prüfen, ob ein eingehender Anruf dazu führt, dass ein anderer Anruf getrennt wird. Stellen Sie sicher, 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 bei Beantwortung des eingehenden Mobilanrufs getrennt wird.
Anrufprotokolleinträge von 3P-Anruf-Apps
Entwickler von 3P-Anruf-Apps können sich dafür entscheiden, dass Anrufe in ihrer App im Systemanrufprotokoll protokolliert werden (siehe EXTRA_LOG_SELF_MANAGED_CALLS
). Dadurch ist es möglich, dass im Anrufprotokoll Einträge vorhanden sind, die nicht für Mobilfunkanrufe gelten.
Wenn die AOSP-Dialer-App Anrufprotokolleinträge im Zusammenhang mit einer 3P-Anruf-App anzeigt, wird der Name der App, in der der Anruf stattgefunden hat, im Anrufprotokoll angezeigt, wie unten dargestellt:
![Anrufprotokolleintrag mit der 3P-Anruf-App](https://source.android.com/static/docs/core/connect/images/call-log-entry-3p.png?authuser=6&hl=de)
Um den Namen einer App zu ermitteln, die einem Anrufprotokolleintrag zugeordnet ist, verwenden Sie die Spalten PHONE_ACCOUNT_COMPONENT_NAME
und PHONE_ACCOUNT_ID
im Anrufprotokollanbieter, um eine Instanz von PhoneAccountHandle
zu erstellen, die die Quelle eines Anrufprotokolleintrags identifiziert. Fragen Sie TelecomManager
ab, um die Details für das PhoneAccount zu erhalten.
Um festzustellen, ob ein Anrufprotokolleintrag von einer 3P-Anruf-App stammt, überprüfen Sie PhoneAccount
Funktionen , um zu sehen, ob CAPABILITY_SELF_MANAGED
festgelegt ist.
Die getLabel
Methode des zurückgegebenen PhoneAccount
gibt den Namen der App zurück, die einem Anrufprotokolleintrag der anrufenden Drittanbieter-App zugeordnet ist.
Validierung
Um zu testen, ob Ihr Gerät 3P-Anruf-Apps unterstützt, verwenden Sie die Telecomm-Testanwendung, die die selbstverwaltete ConnectionService-API implementiert. Die Anwendung befindet sich in /packages/services/Telecomm/testapps/
.
Erstellen Sie die Test-App aus dem Stammverzeichnis Ihres Android-Quell-Repositorys mit:
mmma packages/services/Telecomm/testapps/
Installieren Sie die Build-Apk mit
adb install -g -r <apk path>
. Anschließend wird Ihrem Launcher ein Symbol für ein selbstverwaltetes Beispiel hinzugefügt.Tippen Sie auf das Symbol, um die Testanwendung zu öffnen.
Bearbeitung eingehender Anrufe, die einen laufenden Anruf unterbrechen
Befolgen Sie diese Schritte, um zu überprüfen, ob ein eingehender Anruf einen laufenden 3P-Anruf trennt.
![Testanwendung für 3P-Anruf-Apps](https://source.android.com/static/docs/core/connect/images/test-app-3p-call.png?authuser=6&hl=de)
- Deaktivieren Sie die Option „Haltbar“ .
- Tippen Sie auf AUSGEHEND, um einen neuen ausgehenden Beispielanruf zu starten.
- Tippen Sie auf die Schaltfläche AKTIV , um den Anruf zu aktivieren.
- Rufen Sie mit einem anderen Telefon die Telefonnummer des Testgeräts an. Dadurch wird das Szenario aufgerufen, in dem Ihr Dialer den Namen einer App erhält, deren Anruf unterbrochen wird.
- Wenn Sie fertig sind, tippen Sie in der Test-App auf die Schaltfläche TRENNEN .
Anrufprotokolleinträge von 3P-Anruf-Apps
Nach Abschluss der oben genannten Schritte sollte die Test-App einen Anruf im Systemanrufprotokoll protokolliert haben. Um zu bestätigen, dass das Gerät Anrufe von 3P-Anruf-Apps protokolliert, öffnen Sie Ihre Dialer-App und bestätigen Sie, dass der Anruf im Systemanrufprotokoll angezeigt wird.