Android 9 udostępnia interfejsy API, które lepiej obsługują aplikacje do dzwonienia innych firm. Aplikacje do obsługi połączeń innych firm zwykle korzystają z interfejsów API telefonii, takich jak PHONE_STATE
, aby współistnieć z połączeniami telefonicznymi operatora. W związku z tym aplikacje do połączeń innych firm muszą traktować połączenia operatora priorytetowo i często cicho odrzucać połączenia przychodzące w aplikacji lub przerywać trwające połączenie, aby zrobić miejsce na połączenie operatora.
Interfejsy API w Androidzie 9 obsługują scenariusze jednoczesnych połączeń między aplikacjami innych firm a połączeniami operatora. Dzięki temu możesz na przykład odbierać połączenia przychodzące od innych firm podczas połączenia z operatorem. Platforma ponosi odpowiedzialność za zapewnienie, że połączenie operatora będzie utrzymywane, gdy użytkownik będzie prowadzić połączenie z osobą trzecią.
W Androidzie 9 zalecamy, aby aplikacje do połączeń innych firm implementowały samodzielnie zarządzany interfejs ConnectionService
API. Więcej informacji o tym, jak utworzyć aplikację do dzwonienia za pomocą tego interfejsu API, znajdziesz w artykule Tworzenie aplikacji do dzwonienia.
Interfejs API ConnectionService
zarządzany samodzielnie 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 zawartymi w dokumencie definicji zgodności z Androidem (CDD) (sekcja 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 pokazywała nazwę aplikacji do 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 sekcji Wpisy w rejestrze połączeń z aplikacji do połączeń innych firm).
Aplikacje odpowiadają za ustawianie wartości
CAPABILITY_SUPPORT_HOLD
i
CAPABILITY_HOLD
w połączeniach aplikacji. W niektórych przypadkach aplikacja może nie być w stanie przeprowadzić połączenia. Ramy te zawierają przepisy dotyczące rozwiązywania tego typu spraw.
Scenariusze
Zmodyfikuj aplikację do wybierania numerów, aby obsługiwała te sytuacje.
Obsługa połączeń przychodzących, które przerywają trwające połączenie
W sytuacji, gdy trwa połączenie z osobą trzecią (np.połączenie SuperCaller), które nie obsługuje zawieszenia, a użytkownik odbiera połączenie w sieci komórkowej (np. za pomocą operatora FooCom), aplikacja Telefon lub Dialer powinna poinformować użytkownika, że odebranie połączenia w sieci komórkowej spowoduje zakończenie trwającego połączenia z osobą trzecią.
Jest to ważne, ponieważ aplikacja do połączeń innej firmy może prowadzić połączenie, którego nie można utrzymać w ramach platformy. Odebranie nowego połączenia mobilnego spowoduje rozłączenie trwającego połączenia z aplikacji innej firmy.
Przykład interfejsu znajdziesz na ilustracji:
Rysunek 1. Połączenie przychodzące przerywa trwające połączenie z aplikacją innej firmy.
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ń.
Sprawdź, czy
EXTRA_ANSWERING_DROPS_FG_CALL
ma wartość TRUE
, a
EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
ma nazwę aplikacji, której połączenie zostanie przerwane po odebraniu połączenia przychodzącego na telefon komórkowy.
Wpisy w historii połączeń z aplikacji do dzwonienia innych firm
Deweloperzy aplikacji do dzwonienia 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ę pojawiać wpisy, które nie dotyczą połączeń w sieci komórkowej.
Gdy aplikacja do wybierania numerów AOSP wyświetla wpisy w historii połączeń związane z aplikacją do dzwonienia innej firmy, w historii połączeń wyświetlana jest nazwa aplikacji, w której odbyło się połączenie, jak pokazano na ilustracji:
Rysunek 2. Wpis w dzienniku połączeń z nazwą aplikacji do połączeń innej firmy w aplikacji do wybierania numerów.
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ć instancję PhoneAccountHandle
, która identyfikuje źródło wpisu w rejestrze połączeń. Zapytanie
TelecomManager
aby uzyskać szczegółowe informacje o obiekcie PhoneAccount.
Aby sprawdzić, czy wpis w historii połączeń pochodzi z aplikacji do dzwonienia innej firmy, sprawdź
PhoneAccount
możliwości , aby zobaczyć, czy ustawiona jest wartość
CAPABILITY_SELF_MANAGED
.
Metoda
getLabel
zwróconego interfejsu PhoneAccount
zwraca nazwę aplikacji powiązanej
z wpisem w rejestrze połączeń z aplikacji do dzwonienia 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 ConnectionService API zarządzany samodzielnie. Aplikacja znajduje się w lokalizacji /packages/services/Telecomm/testapps/
.
Zbuduj aplikację testową z poziomu głównego repozytorium kodu źródłowego Androida, używając tego polecenia:
mmma packages/services/Telecomm/testapps/
Zainstaluj pakiet APK kompilacji za pomocą narzędzia
adb install -g -r <apk path>
. Do Menu z aplikacjami zostanie dodana ikona próbki zarządzanej samodzielnie.Kliknij ikonę, aby otworzyć aplikację testową.
Obsługa połączeń przychodzących, które przerywają trwające połączenie
Aby sprawdzić, czy połączenie przychodzące przerywa trwające połączenie z usługą innej firmy, wykonaj te czynności.
Rysunek 3. Testowanie aplikacji za pomocą przykładowych implementacji interfejsu ConnectionService API.
- Odznacz opcję Możliwość wstrzymania.
- Kliknij WYCHODZĄCE, aby rozpocząć nowe przykładowe połączenie wychodzące.
- Kliknij przycisk AKTYWNE, aby aktywować połączenie.
- Zadzwoń na numer telefonu testowanego urządzenia z innego telefonu. W tym przypadku dialer otrzyma nazwę aplikacji, której połączenie zostanie przerwane.
- Gdy skończysz, w aplikacji testowej kliknij przycisk ODŁĄCZ.
Wpisy w historii połączeń z aplikacji do dzwonienia innych firm
Po wykonaniu powyższych czynności aplikacja testowa powinna zarejestrować wywołanie w dzienniku połączeń systemowych. Aby potwierdzić, że urządzenie rejestruje połączenia z aplikacji do dzwonienia innych firm, otwórz aplikację do dzwonienia i sprawdź, czy połączenie jest widoczne w systemowym rejestrze połączeń.