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 połączeń telefonicznych, 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 od operatora i często odrzucać w sposób cichy połączenia przychodzące w aplikacji lub kończyć trwające połączenia, aby zrobić miejsce dla połączenia od operatora.
Interfejsy API w Androidzie 9 obsługują jednoczesne scenariusze połączeń między aplikacjami innych firm a połączeniami z operatorem. 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 innych firm do wykonywania połączeń 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) (sekcji 7.4.1.2) należy zadbać o to, aby aplikacja do wybierania numerów lub aplikacja telefoniczna wyświetlała 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 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 konfigurowanie ustawieńCAPABILITY_SUPPORT_HOLD
i CAPABILITY_HOLD
połączeń aplikacji. W niektórych okolicznościach aplikacja może jednak nie być w stanie wstrzymać wywołania. 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 telefonie 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 komórkę.
wpisy w dzienniku połączeń z aplikacji do 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, które nie dotyczą połączeń 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ń pojawia 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 w rejestrze połączeń, użyj kolumn PHONE_ACCOUNT_COMPONENT_NAME
i PHONE_ACCOUNT_ID
w dostawcy rejestru połączeń, aby utworzyć wystąpienie kolumny PhoneAccountHandle
, która identyfikuje źródło wpisu w rejestrze połączeń. Wykonaj zapytanie TelecomManager
, aby uzyskać szczegółowe informacje o koncie telefonu.
Aby sprawdzić, czy wpis w historii połączeń pochodzi z aplikacji do połączeń innej firmy, sprawdź PhoneAccount
, czy opcja CAPABILITY_SELF_MANAGED
jest ustawiona.
Metoda getLabel
zwraca nazwę aplikacji powiązanej z wpisem w rejestrze połączeń z aplikacji do wykonywania połączeń innej firmy.PhoneAccount
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>
. Następnie do menu z aplikacjami zostanie dodana ikona Sample (Samodzielne zarządzanie).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 dzienniku połączeń z aplikacji do połączeń innych firm;
Po wykonaniu powyższych 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ń.