Android 9 menyediakan API untuk mendukung aplikasi panggilan
pihak ketiga dengan lebih baik. Aplikasi panggilan pihak ketiga biasanya mengandalkan API Layanan Telepon seperti
siaran PHONE_STATE
untuk berdampingan bersama panggilan telepon operator. Sebagai
akibatnya, aplikasi panggilan pihak ketiga harus memberikan prioritas pada panggilan operator dan sering kali
menolak panggilan masuk secara diam-diam di aplikasi, atau menghentikan
panggilan yang sedang berlangsung untuk memberi jalan bagi panggilan operator.
API di Android 9 mendukung skenario panggilan serentak antara aplikasi pihak ketiga dan panggilan operator. Hal ini memungkinkan, misalnya, untuk menerima panggilan pihak ketiga yang masuk saat melakukan panggilan operator. Framework ini bertanggung jawab untuk memastikan panggilan operator dijeda saat pengguna melakukan panggilan pihak ketiga.
Di Android 9, aplikasi panggilan pihak ketiga dianjurkan untuk
mengimplementasikan ConnectionService
API yang dikelola sendiri. Untuk informasi selengkapnya tentang cara
mem-build aplikasi panggilan menggunakan API ini, lihat
Mem-build aplikasi panggilan.
ConnectionService
API yang dikelola sendiri juga memberi developer peluang
untuk memilih ikut serta agar panggilan di aplikasi mereka dicatat dalam log panggilan sistem (lihat
EXTRA_LOG_SELF_MANAGED_CALLS
).
Sesuai dengan persyaratan dalam
Dokumen Definisi Kompatibilitas Android (CDD)
(bagian 7.4.1.2), Anda harus memastikan aplikasi telepon atau keypad menampilkan
entri log panggilan ini dan menampilkan nama aplikasi panggilan pihak ketiga tempat
panggilan berasal (untuk contoh cara aplikasi keypad AOSP memenuhi
persyaratan ini, lihat
Entri log panggilan dari aplikasi panggilan pihak ketiga).
Aplikasi bertanggung jawab untuk menetapkan
CAPABILITY_SUPPORT_HOLD
dan
CAPABILITY_HOLD
pada koneksi aplikasinya. Namun, ada kemungkinan aplikasi tidak dapat menahan
panggilan dalam beberapa situasi. Framework ini mencakup ketentuan untuk menyelesaikan
jenis kasus ini.
Skenario
Anda harus mengubah aplikasi telepon untuk menangani skenario berikut.
Menangani panggilan masuk yang memutuskan panggilan yang sedang berlangsung
Dalam skenario saat ada panggilan pihak ketiga yang sedang berlangsung (misalnya, dalam panggilan SuperCaller) yang tidak mendukung penangguhan, dan pengguna menerima panggilan seluler (misalnya, menggunakan operator FooCom), aplikasi Telepon atau Telepon Anda harus menunjukkan kepada pengguna bahwa menjawab panggilan jaringan seluler akan mengakhiri panggilan pihak ketiga yang sedang berlangsung.
Pengalaman pengguna ini penting karena aplikasi panggilan pihak ketiga mungkin memiliki panggilan yang sedang berlangsung yang tidak dapat ditahan oleh framework. Menjawab panggilan seluler baru akan menyebabkan panggilan pihak ketiga yang sedang berlangsung terputus.
Lihat antarmuka pengguna pada gambar untuk mengetahui contohnya:
Gambar 1. Panggilan masuk memutuskan panggilan pihak ketiga yang sedang berlangsung.
Aplikasi dialler Anda dapat memeriksa apakah panggilan masuk menyebabkan panggilan lain
terputus dengan memeriksa
tambahan panggilan.
Pastikan
EXTRA_ANSWERING_DROPS_FG_CALL
ditetapkan ke TRUE
, dan
EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
ditetapkan ke nama aplikasi yang panggilannya terputus setelah menjawab
panggilan seluler masuk.
Entri log panggilan dari aplikasi panggilan pihak ketiga
Developer aplikasi panggilan pihak ketiga dapat memilih untuk mencatat panggilan di aplikasi mereka
ke dalam log panggilan sistem (lihat
EXTRA_LOG_SELF_MANAGED_CALLS
).
Artinya, Anda dapat memiliki entri dalam log panggilan yang bukan untuk
panggilan jaringan seluler.
Saat aplikasi dialer AOSP menampilkan entri log panggilan yang terkait dengan aplikasi panggilan pihak ketiga, nama aplikasi tempat panggilan dilakukan akan ditampilkan di log panggilan, seperti yang diilustrasikan dalam gambar:
Gambar 2. Entri log panggilan dengan nama aplikasi panggilan pihak ketiga di aplikasi telepon.
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. Buat kueri
TelecomManager
untuk mendapatkan detail PhoneAccount.
Untuk menentukan apakah entri log panggilan berasal dari aplikasi panggilan pihak ketiga, periksa
kemampuan PhoneAccount
untuk melihat apakah
CAPABILITY_SELF_MANAGED
telah ditetapkan.
Metode
getLabel
dari PhoneAccount
yang ditampilkan akan menampilkan nama aplikasi yang terkait
dengan entri log panggilan dari aplikasi panggilan pihak ketiga.
Validasi
Untuk menguji apakah perangkat Anda mendukung aplikasi panggilan pihak ketiga, gunakan aplikasi
pengujian Telecomm, yang menerapkan ConnectionService API yang dikelola sendiri. Aplikasi
terletak di
/packages/services/Telecomm/testapps/
.
Build aplikasi pengujian dari root repositori sumber Android Anda menggunakan:
mmma packages/services/Telecomm/testapps/
Instal apk build menggunakan
adb install -g -r <apk path>
. Ikon Contoh Pengelolaan Mandiri kemudian ditambahkan ke peluncur Anda.Ketuk ikon untuk membuka aplikasi pengujian.
Menangani panggilan masuk yang memutuskan hubungan panggilan yang sedang berlangsung
Ikuti langkah-langkah berikut untuk memverifikasi bahwa panggilan masuk memutuskan koneksi panggilan pihak ketiga yang sedang berlangsung.
Gambar 3. Menguji aplikasi dengan implementasi contoh ConnectionService API.
- Hapus opsi Holdable.
- Ketuk KELUAR untuk memulai contoh panggilan keluar baru.
- Ketuk tombol AKTIF untuk mengaktifkan panggilan.
- Hubungi nomor telepon perangkat yang sedang diuji dengan ponsel lain. Tindakan ini akan memanggil skenario saat dialer Anda diberi nama aplikasi, yang akan memutuskan panggilannya.
- Setelah selesai, ketuk tombol DISCONNECT di aplikasi pengujian.
Entri log panggilan dari aplikasi panggilan pihak ketiga
Setelah menyelesaikan langkah-langkah di atas, aplikasi pengujian seharusnya sudah mencatat panggilan ke log panggilan sistem. Untuk mengonfirmasi bahwa perangkat mencatat log panggilan dari aplikasi panggilan pihak ketiga, buka aplikasi telepon dan pastikan panggilan muncul di log panggilan sistem.