Obsługa aplikacji do połączeń innych firm

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:

Połączenie przychodzące przerywa trwające połączenie z aplikacji innej firmy

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:

Wpis logu połączeń z aplikacją do połączeń innej firmy

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/.

  1. Utwórz aplikację testową z katalogu głównego repozytorium kodu źródłowego Androida, używając tego polecenia:

    mmma packages/services/Telecomm/testapps/

  2. Zainstaluj utworzony plik APK za pomocą polecenia adb install -g -r <apk path>. Do Menu z aplikacjami zostanie dodana ikona Self-Managed Sample.

  3. 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:

Testowanie aplikacji pod kątem aplikacji do połączeń innych firm

Rysunek 3. Aplikacja testowa z przykładowymi implementacjami interfejsu API ConnectionService.

  1. Wyczyść opcję Holdable.
  2. Kliknij OUTGOING (WYCHODZĄCE), aby rozpocząć nowe przykładowe połączenie wychodzące.
  3. Kliknij przycisk ACTIVE (AKTYWNE), aby aktywować połączenie.
  4. 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.
  5. 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ń.