Android 9 udostępnia interfejsy API, które lepiej obsługują aplikacje do połączeń innych firm. Aplikacje do połączeń innych firm zwykle korzystają z interfejsów Telephony API, takich jak transmisja PHONE_STATE, aby współistnieć z połączeniami telefonicznymi operatora. W rezultacie aplikacje do połączeń innych firm muszą traktować połączenia operatora jako priorytetowe i często odrzucają połączenia przychodzące w aplikacji lub kończą trwające połączenie, aby zrobić miejsce na połączenie operatora.
Interfejsy API w Androidzie 9 obsługują scenariusze równoczesnych połączeń między aplikacjami innych firm a połączeniami operatora. Dzięki temu można na przykład odbierać połączenia przychodzące z aplikacji innych firm podczas rozmowy z operatorem. Platforma przejmuje odpowiedzialność za utrzymanie połączenia operatora, gdy użytkownik odbiera połączenie z aplikacji innej firmy.
W Androidzie 9 zachęcamy aplikacje do połączeń innych firm do implementowania interfejsu API ConnectionService zarządzanego samodzielnie. Więcej informacji o tym, jak
utworzyć aplikację do połączeń za pomocą tego interfejsu API, znajdziesz w artykule
Tworzenie aplikacji do połączeń.
Interfejs API zarządzany samodzielnie ConnectionService daje też deweloperom możliwość
włączenia rejestrowania połączeń w ich aplikacji w systemowym rejestrze połączeń (patrz
EXTRA_LOG_SELF_MANAGED_CALLS).
Zgodnie z wymaganiami w
dokumencie definicji zgodności z Androidem (CDD)
(sekcja 7.4.1.2) musisz się upewnić, że aplikacja do obsługi połączeń lub telefon wyświetla te
wpisy w rejestrze połączeń i pokazuje nazwę aplikacji do połączeń innej firmy, z której
pochodzi połączenie (przykład tego, jak aplikacja do obsługi połączeń AOSP spełnia to
wymaganie, znajdziesz w sekcji
Wpisy w rejestrze połączeń z aplikacji do połączeń innych firm).
Aplikacje są odpowiedzialne za ustawianie
CAPABILITY_SUPPORT_HOLD
i
CAPABILITY_HOLD
w połączeniach swoich aplikacji. W niektórych okolicznościach aplikacja może jednak nie być w stanie wstrzymać połączenia. Platforma zawiera rozwiązania tych problemów.
Scenariusze
Musisz zmodyfikować aplikację do obsługi połączeń, aby obsługiwała te scenariusze.
Obsługa połączeń przychodzących, które rozłączają trwające połączenie
W sytuacji, gdy trwa połączenie z aplikacji innej firmy (np.w SuperCaller), które nie obsługuje wstrzymywania, a użytkownik odbiera połączenie komórkowe (np. za pomocą operatora FooCom), aplikacja do obsługi połączeń lub telefon powinna poinformować użytkownika, że odebranie połączenia w sieci komórkowej spowoduje zakończenie trwającego połączenia z aplikacji innej firmy.
To ważne, ponieważ aplikacja do połączeń innej firmy może mieć trwające połączenie, którego platforma nie może wstrzymać. Odebranie nowego połączenia komórkowego powoduje rozłączenie trwającego połączenia z aplikacji innej firmy.
Przykład interfejsu użytkownika znajdziesz na ilustracji:
Rysunek 1. Połączenie przychodzące rozłączające trwające połączenie z aplikacji innej firmy.
Aplikacja do obsługi połączeń może sprawdzić, czy połączenie przychodzące powoduje rozłączenie innego połączenia, sprawdzając dodatkowe informacje o połączeniu.
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 zostanie rozłączone po odebraniu
połączenia przychodzącego w sieci komórkowej.
Wpisy w rejestrze połączeń z aplikacji do połączeń innych firm
Deweloperzy aplikacji do połączeń innych firm mogą włączyć rejestrowanie połączeń w swojej aplikacji
w systemowym rejestrze połączeń (patrz
EXTRA_LOG_SELF_MANAGED_CALLS).
Oznacza to, że w rejestrze połączeń mogą się znajdować wpisy, które nie dotyczą
połączeń w sieci komórkowej.
Gdy aplikacja do obsługi połączeń AOSP wyświetla wpisy w rejestrze połączeń związane z aplikacją do połączeń innej firmy, w rejestrze połączeń wyświetla się nazwa aplikacji, w której odbyło się połączenie, jak pokazano na ilustracji:
Rysunek 2. Wpis logu połączeń z nazwą aplikacji do połączeń innej firmy w aplikacji Telefon.
Aby określić nazwę aplikacji powiązanej z wpisem logu w rejestrze połączeń, użyj kolumn
PHONE_ACCOUNT_COMPONENT_NAME
i
PHONE_ACCOUNT_ID
w dostawcy rejestru połączeń, aby utworzyć instancję
PhoneAccountHandle,
która identyfikuje źródło wpisu logu w rejestrze połączeń. Wyślij zapytanie
TelecomManager
, aby uzyskać szczegółowe informacje o PhoneAccount.
Aby sprawdzić, czy wpis logu w rejestrze połączeń pochodzi z aplikacji do połączeń innej firmy, sprawdź
PhoneAccount możliwości
aby zobaczyć, czy ustawiona jest wartość
CAPABILITY_SELF_MANAGED.
The
getLabel
metoda zwróconego PhoneAccount zwraca nazwę aplikacji powiązanej
z wpisem logu połączeń z aplikacji do połączeń innej firmy.
Weryfikacja
Aby sprawdzić, czy urządzenie obsługuje aplikacje do połączeń innych firm, użyj aplikacji testowej Telecomm, która implementuje interfejs API ConnectionService zarządzany samodzielnie. Aplikacja znajduje się w katalogu
/packages/services/Telecomm/testapps/.
Utwórz aplikację testową z katalogu głównego repozytorium kodu źródłowego Androida, używając tego polecenia:
mmma packages/services/Telecomm/testapps/Zainstaluj utworzony plik APK za pomocą polecenia
adb install -g -r <apk path>. Do Menu z aplikacjami zostanie dodana ikona Self-Managed Sample.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 aplikacji innej firmy:
Rysunek 3. Aplikacja testowa z przykładowymi implementacjami interfejsu API ConnectionService.
- Wyczyść opcję Holdable.
- Kliknij OUTGOING (WYCHODZĄCE), aby rozpocząć nowe przykładowe połączenie wychodzące.
- Kliknij przycisk ACTIVE (AKTYWNE), aby aktywować połączenie.
- Zadzwoń na numer telefonu testowanego urządzenia z innego telefonu. Spowoduje to wywołanie scenariusza, w którym aplikacja do obsługi połączeń otrzyma nazwę aplikacji, której połączenie zostanie rozłączone.
- Gdy skończysz, kliknij przycisk DISCONNECT (ROZŁĄCZ) w aplikacji testowej.
Wpisy w rejestrze połączeń z aplikacji do połączeń innych firm
Po wykonaniu powyższych czynności aplikacja testowa powinna zarejestrować połączenie w systemowym rejestrze połączeń. Aby potwierdzić, że urządzenie rejestruje połączenia z aplikacji do połączeń innych firm, otwórz aplikację do obsługi połączeń i sprawdź, czy połączenie jest widoczne w systemowym rejestrze połączeń.