Android 9 menyediakan API untuk mendukung aplikasi panggilan pihak ketiga (3P) dengan lebih baik. Aplikasi panggilan 3P biasanya mengandalkan API Telephony seperti siaran PHONE_STATE
untuk berdampingan dengan panggilan telepon operator. Akibatnya, aplikasi panggilan 3P harus memberikan prioritas panggilan operator dan sering kali terpaksa menolak panggilan masuk dalam aplikasi secara diam-diam, atau mengakhiri panggilan yang sedang berlangsung untuk memberi jalan bagi panggilan operator.
API di Android 9 mendukung skenario panggilan bersamaan antara aplikasi 3P dan panggilan operator. Hal ini memungkinkan, misalnya, untuk menerima panggilan 3P masuk saat sedang melakukan panggilan operator. Kerangka kerja ini memikul tanggung jawab untuk memastikan panggilan operator diadakan ketika pengguna terlibat dalam panggilan 3P.
Di Android 9, aplikasi panggilan 3P dianjurkan 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 memberikan kesempatan kepada pengembang untuk ikut serta agar panggilan dalam 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/telepon Anda menampilkan entri log panggilan ini dan menampilkan nama aplikasi panggilan 3P tempat panggilan tersebut 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 aplikasinya. Namun, ada kemungkinan aplikasi tidak dapat menahan panggilan dalam kondisi tertentu. Kerangka kerja ini mencakup ketentuan-ketentuan untuk menyelesaikan kasus-kasus seperti ini.
Skenario
Anda harus memodifikasi aplikasi telepon untuk menangani skenario berikut.
Menangani panggilan masuk yang memutuskan panggilan yang sedang berlangsung
Dalam skenario ketika ada panggilan 3P yang sedang berlangsung (misalnya dalam panggilan SuperCaller) yang tidak mendukung penangguhan, dan pengguna menerima panggilan seluler (misalnya melalui operator 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 kerangka kerja. 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](https://source.android.com/static/docs/core/connect/images/incoming-call-3p-call-app.png?authuser=0&hl=id)
Aplikasi telepon Anda dapat memeriksa apakah panggilan masuk menyebabkan panggilan lain terputus dengan memeriksa ekstra panggilan . 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 masuk.
Entri log panggilan dari aplikasi panggilan 3P
Pengembang aplikasi panggilan 3P dapat memilih agar panggilan di aplikasi mereka dicatat dalam log panggilan sistem (lihat EXTRA_LOG_SELF_MANAGED_CALLS
). Ini berarti ada kemungkinan ada 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 berlangsung ditampilkan di log panggilan, seperti yang diilustrasikan di bawah ini:
![Entri log panggilan dengan aplikasi panggilan 3P](https://source.android.com/static/docs/core/connect/images/call-log-entry-3p.png?authuser=0&hl=id)
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. Permintaan TelecomManager
untuk mendapatkan detail 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. Aplikasinya terletak di /packages/services/Telecomm/testapps/
.
Bangun 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 Sampel yang Dikelola Sendiri kemudian ditambahkan ke peluncur Anda.Ketuk ikon untuk membuka aplikasi pengujian.
Menangani panggilan masuk yang memutuskan panggilan yang sedang berlangsung
Ikuti langkah-langkah berikut untuk memverifikasi bahwa panggilan masuk memutus panggilan 3P yang sedang berlangsung.
![Uji aplikasi untuk aplikasi panggilan 3P](https://source.android.com/static/docs/core/connect/images/test-app-3p-call.png?authuser=0&hl=id)
- Hapus centang pada opsi Holdable .
- Ketuk KELUAR untuk memulai contoh panggilan keluar baru.
- Ketuk tombol AKTIF untuk mengaktifkan panggilan.
- Hubungi nomor telepon perangkat yang diuji dengan telepon lain. Ini memunculkan skenario di mana dialer Anda diberikan nama aplikasi, yang panggilannya akan terputus.
- 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 perangkat mencatat panggilan dari aplikasi panggilan 3P, buka aplikasi telepon Anda dan konfirmasikan panggilan tersebut muncul di log panggilan sistem.