Android 9 bietet APIs, die die Aufrufe von Drittanbieter-Apps besser unterstützen. 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 können Sie beispielsweise einen eingehenden Anruf von einem Drittanbieter erhalten, während Sie gerade in einem Anruf mit Ihrem Mobilfunkanbieter sind. Das Framework übernimmt die Verantwortung dafür, 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.
Umgang mit eingehenden Anrufen, die einen laufenden Anruf beenden
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:
Abbildung 1: Eingehender Anruf, durch den ein laufender Anruf eines Drittanbieters getrennt wird
In den Anruferweiterungen Ihrer Telefon-App können Sie prüfen, ob ein eingehender Anruf die Verbindung zu einem anderen Anruf unterbricht.
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.
Einträge im Anrufprotokoll von Drittanbieter-Anruf-Apps
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 eines Drittanbieters enthält, wird im Anrufprotokoll der Name der App angezeigt, über die der Anruf stattgefunden hat, wie in der Abbildung dargestellt:
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
Wenn Sie prüfen möchten, ob Ihr Gerät Anruf-Apps von Drittanbietern unterstützt, verwenden Sie die Telecomm-Test-App, die die selbstverwaltete ConnectionService API implementiert. Die App befindet sich unter /packages/services/Telecomm/testapps/
.
Erstellen Sie die Testanwendung im Stammverzeichnis Ihres Android-Quell-Repositorys mit:
mmma packages/services/Telecomm/testapps/
Installieren Sie das Build-APK mit
adb install -g -r <apk path>
. Ihrem Launcher wird dann ein Symbol für selbst verwaltete Samples hinzugefügt.Tippen Sie 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.
Abbildung 3: Testen Sie die App mit Beispielimplementierungen der ConnectionService API.
- Entfernen Sie das Häkchen bei Holdable (Anhaltbar).
- Tippen Sie auf AUSGEHEND, um einen neuen Beispielanruf zu starten.
- Tippen Sie auf die Schaltfläche AKTIV, um den Anruf zu aktivieren.
- Rufen Sie die Telefonnummer des zu testenden Geräts mit einem anderen Smartphone an. Dies führt dazu, dass Ihrem Telefonbuch der Name einer App mitgeteilt wird, deren Anruf getrennt wird.
- Wenn Sie fertig sind, tippen Sie in der Test-App auf die Schaltfläche VERBINDUNG TRENNEN.
Einträge im Anrufprotokoll 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 Telefon-App und prüfen Sie, ob der Anruf im Systemanrufprotokoll angezeigt wird.