Android 9 udostępnia interfejsy API, które lepiej obsługują aplikacje do połączeń innych firm (3P). Aplikacje do połączeń 3P zazwyczaj korzystają z interfejsów API telefonii, takich jak transmisja PHONE_STATE
, aby współistnieć z połączeniami telefonicznymi operatora. W rezultacie aplikacje do połączeń 3P muszą dawać priorytet połączeniom z operatorem i często uciekają się do cichego odrzucania połączeń przychodzących w aplikacji lub kończenia trwającego połączenia, aby zrobić miejsce dla połączenia z operatora.
Interfejsy API w systemie Android 9 obsługują scenariusze równoczesnych połączeń między aplikacjami 3P i połączeniami operatora. Umożliwia to na przykład odbieranie przychodzącego połączenia 3P podczas prowadzenia połączenia przez operatora. Struktura przejmuje odpowiedzialność za zapewnienie, że połączenie z operatorem zostanie utrzymane, gdy użytkownik nawiąże połączenie 3P.
W systemie Android 9 zachęca się aplikacje do połączeń 3P do implementowania samodzielnie zarządzanego interfejsu API ConnectionService
. Aby uzyskać więcej informacji na temat tworzenia aplikacji wywołującej przy użyciu tego interfejsu API, zobacz Tworzenie aplikacji wywołującej .
Samozarządzany interfejs API ConnectionService
daje także programistom możliwość wyrażenia zgody na rejestrowanie połączeń w ich aplikacji w dzienniku wywołań systemowych (zobacz EXTRA_LOG_SELF_MANAGED_CALLS
). Zgodnie z wymaganiami dokumentu definicji zgodności systemu Android (CDD) (sekcja 7.4.1.2) należy upewnić się, że aplikacja dialer/telefon wyświetla te wpisy dziennika połączeń i wyświetla nazwę aplikacji do połączeń 3P, z której pochodzi połączenie (na przykład jak aplikacja dialera AOSP spełnia ten wymóg, zobacz wpisy dziennika połączeń z aplikacji do połączeń 3P ).
Aplikacje są odpowiedzialne za ustawienie CAPABILITY_SUPPORT_HOLD
i CAPABILITY_HOLD
na połączeniach swoich aplikacji. Może się jednak zdarzyć, że w pewnych okolicznościach aplikacja nie będzie mogła utrzymać połączenia. Ramy zawierają przepisy dotyczące rozstrzygania tego typu spraw.
Scenariusze
Należy zmodyfikować aplikację dialera, aby obsługiwała następujące scenariusze.
Obsługa połączeń przychodzących, które powodują rozłączenie trwającego połączenia
W scenariuszu, w którym trwa połączenie 3P (np. w przypadku połączenia SuperCaller), które nie obsługuje zawieszenia, a użytkownik odbiera połączenie mobilne (np. za pośrednictwem swojego operatora FooCom), aplikacja Dialer/Telefon powinna wskazać użytkownikowi, że odebranie połączenia połączenie w sieci komórkowej zakończy trwające połączenie 3P.
To doświadczenie użytkownika jest ważne, ponieważ aplikacja do połączeń 3P może prowadzić trwające połączenie, którego platforma nie może obsłużyć. Odebranie nowego połączenia komórkowego powoduje rozłączenie trwającego połączenia 3P.
Przykładowy interfejs użytkownika znajdziesz poniżej:
![Połączenie przychodzące rozłączanie trwającego połączenia 3P](https://source.android.com/static/docs/core/connect/images/incoming-call-3p-call-app.png?authuser=19&hl=pl)
Twoja aplikacja do wybierania numerów może sprawdzić, czy połączenie przychodzące powoduje rozłączenie innego połączenia, sprawdzając dodatki do połączeń . Upewnij się, że EXTRA_ANSWERING_DROPS_FG_CALL
jest ustawione na TRUE
, a EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
jest ustawione na nazwę aplikacji, której połączenie zostaje rozłączone po odebraniu przychodzącego połączenia komórkowego.
Wpisy dziennika połączeń z aplikacji do połączeń 3P
Twórcy aplikacji do połączeń 3P mogą wyrazić zgodę na rejestrowanie połączeń w ich aplikacji w rejestrze połączeń systemowych (zobacz EXTRA_LOG_SELF_MANAGED_CALLS
). Oznacza to, że w rejestrze połączeń mogą znajdować się wpisy, które nie dotyczą połączeń w sieci komórkowej.
Gdy aplikacja dialera AOSP wyświetla wpisy dziennika połączeń powiązane z aplikacją do połączeń 3P, nazwa aplikacji, w której odbyło się połączenie, jest wyświetlana w rejestrze połączeń, jak pokazano poniżej:
![Wpis do dziennika połączeń za pomocą aplikacji do połączeń 3P](https://source.android.com/static/docs/core/connect/images/call-log-entry-3p.png?authuser=19&hl=pl)
Aby określić nazwę aplikacji powiązanej z wpisem dziennika połączeń, użyj kolumn PHONE_ACCOUNT_COMPONENT_NAME
i PHONE_ACCOUNT_ID
w dostawcy dziennika połączeń, aby utworzyć instancję PhoneAccountHandle
, która identyfikuje źródło wpisu dziennika połączeń. Zapytanie TelecomManager
aby uzyskać szczegółowe informacje o koncie PhoneAccount.
Aby ustalić, czy wpis w dzienniku połączeń pochodzi z aplikacji do połączeń 3P, sprawdź możliwości PhoneAccount
i zobacz, czy ustawiono CAPABILITY_SELF_MANAGED
.
Metoda getLabel
zwróconego PhoneAccount
zwraca nazwę aplikacji powiązanej z wpisem dziennika połączeń z aplikacji do połączeń 3P.
Walidacja
Aby sprawdzić, czy Twoje urządzenie obsługuje aplikacje do połączeń 3P, użyj aplikacji testowej Telecomm, która implementuje samodzielnie zarządzany interfejs API ConnectionService. Aplikacja znajduje się w /packages/services/Telecomm/testapps/
.
Zbuduj aplikację testową z katalogu głównego repozytorium źródłowego Androida, używając:
mmma packages/services/Telecomm/testapps/
Zainstaluj kompilację apk, używając polecenia
adb install -g -r <apk path>
. Następnie do programu uruchamiającego zostanie dodana ikona próbki samodzielnie zarządzanej.Stuknij ikonę, aby otworzyć aplikację testową.
Obsługa połączeń przychodzących, które powodują rozłączenie trwającego połączenia
Wykonaj poniższe kroki, aby sprawdzić, czy połączenie przychodzące rozłącza trwające połączenie 3P.
![Aplikacja testowa dla aplikacji do połączeń 3P](https://source.android.com/static/docs/core/connect/images/test-app-3p-call.png?authuser=19&hl=pl)
- Odznacz opcję Możliwość zatrzymania .
- Stuknij WYCHODZĄCE , aby rozpocząć nowe przykładowe połączenie wychodzące.
- Naciśnij przycisk AKTYWNE , aby połączenie stało się aktywne.
- Zadzwoń pod numer telefonu testowanego urządzenia za pomocą innego telefonu. Spowoduje to wywołanie scenariusza, w którym dialer otrzymuje nazwę aplikacji, która spowoduje rozłączenie połączenia.
- Po zakończeniu dotknij przycisku ROZŁĄCZ w aplikacji testowej.
Wpisy dziennika połączeń z aplikacji do połączeń 3P
Po wykonaniu powyższych kroków aplikacja testowa powinna zarejestrować wywołanie w dzienniku wywołań systemowych. Aby sprawdzić, czy urządzenie rejestruje połączenia z aplikacji do połączeń 3P, otwórz aplikację dialera i potwierdź, że połączenie pojawia się w rejestrze połączeń systemowych.