Mendukung Aplikasi Panggilan Pihak Ketiga

Android 9 menyediakan API untuk mendukung aplikasi panggilan pihak ketiga (3P) dengan lebih baik. Aplikasi panggilan 3P biasanya mengandalkan API Telepon seperti siaran PHONE_STATE untuk hidup berdampingan bersama panggilan telepon operator. Akibatnya, aplikasi panggilan 3P harus memberikan prioritas panggilan operator dan sering kali secara diam-diam menolak panggilan masuk di aplikasi, atau menghentikan panggilan yang sedang berlangsung untuk memberi jalan bagi panggilan operator.

API di Android 9 mendukung skenario panggilan serentak antara aplikasi 3P dan panggilan operator. Hal ini memungkinkan, misalnya, untuk menerima panggilan 3P masuk saat melakukan panggilan operator. Kerangka kerja bertanggung jawab untuk memastikan panggilan operator diadakan saat pengguna terlibat dalam panggilan 3P.

Di Android 9, aplikasi panggilan 3P didorong untuk mengimplementasikan ConnectionService API yang dikelola sendiri. Untuk informasi selengkapnya tentang cara membuat aplikasi panggilan menggunakan API ini, lihat Membuat aplikasi panggilan .

ConnectionService API yang dikelola sendiri juga memberi pengembang kesempatan untuk ikut serta agar panggilan di aplikasi mereka dicatat dalam log panggilan sistem (lihat EXTRA_LOG_SELF_MANAGED_CALLS ). Sesuai persyaratan di Android Compatibility Definition Document (CDD) (bagian 7.4.1.2), Anda harus memastikan aplikasi telepon/dialer Anda menampilkan entri log panggilan ini dan menunjukkan nama aplikasi panggilan 3P tempat panggilan berasal (misalnya bagaimana aplikasi dialer AOSP memenuhi persyaratan ini, lihat Entri log panggilan dari aplikasi panggilan 3P ).

Aplikasi bertanggung jawab untuk menyetel CAPABILITY_SUPPORT_HOLD dan CAPABILITY_HOLD pada koneksi aplikasi mereka. Namun, ada kemungkinan aplikasi tidak dapat menahan panggilan dalam beberapa keadaan. Kerangka tersebut mencakup ketentuan untuk menyelesaikan jenis kasus ini.

Skenario

Anda harus memodifikasi aplikasi dialer untuk menangani skenario berikut.

Menangani panggilan masuk yang memutuskan panggilan yang sedang berlangsung

Dalam skenario di mana ada panggilan 3P yang sedang berlangsung (misalnya dalam panggilan SuperCaller) yang tidak mendukung penangguhan, dan pengguna menerima panggilan seluler (misalnya melalui operator mereka FooCom), aplikasi Dialer/Telepon Anda harus menunjukkan kepada pengguna bahwa menjawab panggilan jaringan seluler akan mengakhiri panggilan 3P yang sedang berlangsung.

Pengalaman pengguna ini penting karena aplikasi panggilan 3P mungkin memiliki panggilan berkelanjutan yang tidak dapat ditahan oleh framework. Menjawab panggilan seluler baru menyebabkan panggilan 3P yang sedang berlangsung terputus.

Lihat antarmuka pengguna di bawah ini sebagai contoh:

Panggilan masuk memutuskan panggilan 3P yang sedang berlangsung
Gambar 1. Panggilan masuk yang memutuskan panggilan 3P yang sedang berlangsung

Aplikasi dialer Anda dapat memeriksa apakah panggilan masuk menyebabkan panggilan lain terputus dengan memeriksa panggilan ekstra . Pastikan EXTRA_ANSWERING_DROPS_FG_CALL disetel ke TRUE , dan EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME disetel ke nama aplikasi yang panggilannya terputus saat menjawab panggilan seluler yang masuk.

Entri log panggilan dari aplikasi panggilan 3P

Pengembang aplikasi panggilan 3P dapat ikut serta agar panggilan di aplikasi mereka dicatat di log panggilan sistem (lihat EXTRA_LOG_SELF_MANAGED_CALLS ). Ini berarti dimungkinkan untuk memiliki entri dalam log panggilan yang bukan untuk panggilan jaringan seluler.

Saat aplikasi dialer AOSP menampilkan entri log panggilan yang terkait dengan aplikasi panggilan 3P, nama aplikasi tempat panggilan dilakukan akan ditampilkan di log panggilan, seperti yang diilustrasikan di bawah ini:

Entri log panggilan dengan aplikasi panggilan 3P
Gambar 2. Entri log panggilan dengan nama aplikasi panggilan 3P pada aplikasi dialer

Untuk menentukan nama aplikasi yang terkait dengan entri log panggilan, gunakan kolom PHONE_ACCOUNT_COMPONENT_NAME dan PHONE_ACCOUNT_ID di penyedia log panggilan untuk membuat instance PhoneAccountHandle , yang mengidentifikasi sumber entri log panggilan. TelecomManager untuk mendapatkan detail untuk PhoneAccount.
Untuk menentukan apakah entri log panggilan berasal dari aplikasi panggilan 3P, periksa kemampuan PhoneAccount untuk melihat apakah CAPABILITY_SELF_MANAGED disetel.

Metode getLabel dari PhoneAccount yang dikembalikan mengembalikan nama aplikasi yang terkait dengan entri log panggilan dari aplikasi panggilan 3P.

Validasi

Untuk menguji apakah perangkat Anda mendukung aplikasi panggilan 3P, gunakan aplikasi pengujian Telecomm, yang mengimplementasikan ConnectionService API yang dikelola sendiri. Aplikasi ini terletak di /packages/services/Telecomm/testapps/ .

  1. Bangun aplikasi pengujian dari root repositori sumber Android Anda menggunakan:

    mmma packages/services/Telecomm/testapps/

  2. Instal build apk menggunakan adb install -g -r <apk path> . Ikon Sampel yang Dikelola Sendiri kemudian ditambahkan ke peluncur Anda.

  3. Ketuk ikon untuk membuka aplikasi pengujian.

Menangani panggilan masuk yang memutuskan panggilan yang sedang berlangsung

Ikuti langkah-langkah ini untuk memverifikasi bahwa panggilan masuk memutuskan panggilan 3P yang sedang berlangsung.

Uji aplikasi untuk aplikasi panggilan 3P
Gambar 3. Uji aplikasi dengan contoh implementasi ConnectionService API yang dikelola sendiri
  1. Hapus centang pada opsi Holdable .
  2. Ketuk KELUAR untuk memulai contoh panggilan keluar baru.
  3. Ketuk tombol AKTIF untuk mengaktifkan panggilan.
  4. Hubungi nomor telepon perangkat yang sedang diuji dengan telepon lain. Ini memanggil skenario di mana dialer Anda diberi nama aplikasi, yang panggilannya akan terputus.
  5. Setelah selesai, ketuk tombol PUTUSKAN di aplikasi pengujian.

Entri log panggilan dari aplikasi panggilan 3P

Setelah menyelesaikan langkah-langkah di atas, aplikasi pengujian seharusnya mencatat panggilan ke log panggilan sistem. Untuk mengonfirmasi bahwa perangkat mencatat panggilan dari aplikasi panggilan 3P, buka aplikasi dialer Anda dan konfirmasikan bahwa panggilan tersebut muncul di log panggilan sistem.