Android 9 udostępnia interfejsy API, które zapewniają lepszą obsługę aplikacji do połączeń innych firm. Aplikacje do połączeń innych firm zwykle korzystają z interfejsów API do obsługi telefonii, takich jak PHONE_STATE
, aby współistnieć z połączeniami telefonicznymi operatora. W konsekwencji aplikacje do połączeń innych firm muszą przyznawać priorytet połączeniom z operatora i często odrzucają w sposób cichy połączenia przychodzące w aplikacji lub kończą trwające połączenie, aby umożliwić połączenie z operatora.
Interfejsy API w Androidzie 9 obsługują jednoczesne sceny wywoływania aplikacji innych firm z wywołaniami przez operatora. Dzięki temu można na przykład odbierać połączenia od innych firm podczas rozmowy z operatorem. Ramy te obejmują odpowiedzialność za zapewnienie, że połączenie z operatorem jest wstrzymane, gdy użytkownik nawiązuje połączenie z osobą trzecią.
W Androidzie 9 aplikacje do wykonywania połączeń innych firm powinny implementować samodzielnie zarządzany interfejs API ConnectionService
. Więcej informacji o tworzeniu aplikacji do połączeń za pomocą tego interfejsu API znajdziesz w artykule Tworzenie aplikacji do połączeń.
Samodzielnie zarządzane API ConnectionService
daje też deweloperom możliwość włączenia rejestrowania połączeń w aplikacji w systemowym rejestrze połączeń (patrz EXTRA_LOG_SELF_MANAGED_CALLS
). Zgodnie z wymaganiami określonymi w dokumentacji CDD (Compatibility Definition Document) na temat Androida (sekcja 7.4.1.2) należy się upewnić, że aplikacja do wybierania numerów lub aplikacja telefoniczna wyświetla te wpisy w rejestrze połączeń i nazwę aplikacji do wykonywania połączeń innej firmy, z której pochodziło połączenie (przykład tego, jak aplikacja do wybierania numerów w systemie AOSP spełnia to wymaganie, znajdziesz w artykule Wpisy w rejestrze połączeń z aplikacji do wykonywania połączeń innej firmy).
Aplikacje są odpowiedzialne za ustawienie parametrów CAPABILITY_SUPPORT_HOLD
i CAPABILITY_HOLD
w połączeniach aplikacji. Może się jednak zdarzyć, że aplikacja
nie będzie w stanie wznowić połączenia. Ramy te zawierają postanowienia dotyczące rozstrzygania tego typu spraw.
Scenariusze
Aby obsłużyć te scenariusze, zmodyfikuj aplikację do wybierania numerów.
Obsługa połączeń przychodzących, które rozłączają trwające połączenie
W sytuacji, gdy trwa połączenie z usługą zewnętrzną (np.z usługą SuperCaller), która nie obsługuje funkcji wstrzymania, a użytkownik otrzymuje połączenie na telefon komórkowy (np. korzystając z usługi operatora FooCom), aplikacja Dialer lub Phone powinna poinformować użytkownika, że odebranie połączenia z sieci komórkowej spowoduje zakończenie trwającego połączenia z usługą zewnętrzną.
Jest to ważne dla użytkownika, ponieważ aplikacja do połączeń innej firmy może mieć aktywne połączenie, którego nie można wstrzymać. Odbieranie nowego połączenia na urządzeniu mobilnym powoduje rozłączenie trwającego połączenia z osobą trzecią.
Przykładowo, interfejs użytkownika wygląda tak:
Rysunek 1. Połączenie przychodzące rozłącza trwające połączenie z usługą zewnętrzną.
Aplikacja do wybierania numerów może sprawdzić, czy połączenie przychodzące powoduje rozłączenie innego połączenia. Aby to zrobić, sprawdź dodatkowe opcje połączeń.
Upewnij się, że EXTRA_ANSWERING_DROPS_FG_CALL
ma wartość TRUE
, a EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
ma wartość nazwy aplikacji, której połączenie jest rozłączane po odebraniu przychodzącego połączenia na urządzeniu mobilnym.
wpisy w dzienniku połączeń z aplikacji do wykonywania połączeń innych firm;
Deweloperzy aplikacji do wykonywania połączeń innych firm mogą włączyć rejestrowanie połączeń w rejestrze połączeń systemowych (patrz EXTRA_LOG_SELF_MANAGED_CALLS
). Oznacza to, że w rejestrze połączeń mogą się pojawiać wpisy niebędące połączeniami przez sieć komórkową.
Gdy aplikacja AOSP do wybierania numerów wyświetla wpisy dziennika połączeń związane z aplikacją do wykonywania połączeń innej firmy, w dzienniku połączeń wyświetla się nazwa aplikacji, z której wykonano połączenie, jak pokazano na rysunku:
Rysunek 2. Wpis w historii połączeń z nazwą aplikacji do wykonywania połączeń innej firmy w aplikacji Dialer.
Aby określić nazwę aplikacji powiązanej z wpisem logu połączeń, użyj kolumn PHONE_ACCOUNT_COMPONENT_NAME
i PHONE_ACCOUNT_ID
u dostawcy logu połączeń, aby utworzyć instancję PhoneAccountHandle
, która identyfikuje źródło wpisu logu połączeń. Wykonaj zapytanie TelecomManager
, aby uzyskać szczegółowe informacje o koncie PhoneAccount.
Aby sprawdzić, czy wpis w dzienniku połączeń pochodzi z aplikacji do połączeń innej firmy, sprawdź PhoneAccount
możliwości , aby zobaczyć, czy opcja CAPABILITY_SELF_MANAGED
jest ustawiona.
Metoda getLabel
zwracanego obiektu PhoneAccount
zwraca nazwę aplikacji powiązanej z wpisem w rejestrze połączeń z aplikacji do wykonywania połączeń innej firmy.
Weryfikacja
Aby sprawdzić, czy Twoje urządzenie obsługuje aplikacje do połączeń innych firm, użyj aplikacji testowej Telecomm, która implementuje interfejs ConnectionService API. Aplikacja znajduje się w /packages/services/Telecomm/testapps/
.
Utwórz aplikację testową w katalogu głównym repozytorium kodu źródłowego Androida, korzystając z jednego z tych narzędzi:
mmma packages/services/Telecomm/testapps/
Zainstaluj pakiet APK za pomocą narzędzia
adb install -g -r <apk path>
. Ikona Samodzielnie zarządzanego Sample zostanie dodana do menu z aplikacjami.Kliknij ikonę, aby otworzyć aplikację testową.
Obsługa połączeń przychodzących, które rozłączają trwające połączenie
Aby sprawdzić, czy połączenie przychodzące rozłącza trwające połączenie z inną osobą, wykonaj te czynności:
Rysunek 3. przetestować aplikację za pomocą przykładowych implementacji interfejsu ConnectionService API;
- Wyczyść opcję Możliwość przytrzymania.
- Kliknij WYCHODZĄCE, aby rozpocząć nowe próbne połączenie wychodzące.
- Kliknij przycisk AKTYWNY, aby aktywować połączenie.
- Zadzwoń pod numer telefonu testowanego urządzenia z innego telefonu. To wywołuje scenariusz, w którym dialer otrzymuje nazwę aplikacji, której połączenie zostanie rozłączone.
- Gdy skończysz, kliknij przycisk ODŁĄCZ w aplikacji testowej.
wpisy w rejestrze połączeń z aplikacji do rozmów innych firm;
Po wykonaniu tych czynności aplikacja testowa powinna zarejestrować wywołanie w dzienniku wywołań systemu. Aby sprawdzić, czy urządzenie rejestruje połączenia z aplikacji innych firm, otwórz aplikację Dialer i sprawdź, czy połączenie jest widoczne w systemowym rejestrze połączeń.