Mendukung aplikasi panggilan pihak ketiga

Android 9 menyediakan API untuk mendukung aplikasi panggilan pihak ketiga dengan lebih baik. Aplikasi panggilan pihak ketiga biasanya mengandalkan Telephony API seperti PHONE_STATEbroadcast untuk berjalan bersamaan dengan panggilan telepon operator. Akibatnya, aplikasi panggilan pihak ketiga harus memprioritaskan panggilan operator dan sering kali menolak panggilan masuk secara diam-diam di aplikasi, atau mengakhiri 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 masuk dari pihak ketiga saat sedang melakukan panggilan operator. Framework mengasumsikan tanggung jawab untuk memastikan panggilan operator ditahan saat pengguna terlibat dalam panggilan pihak ketiga.

Di Android 9, aplikasi panggilan pihak ketiga dianjurkan untuk menerapkan class ConnectionService yang dikelola sendiri. Untuk mengetahui informasi selengkapnya tentang cara membuat aplikasi panggilan menggunakan class ini, lihat Membangun aplikasi panggilan menggunakan library Core-Telecom.

Class ConnectionService yang dikelola sendiri juga memberi developer kesempatan untuk memilih ikut serta agar panggilan di aplikasi mereka dicatat dalam log panggilan sistem (lihat EXTRA_LOG_SELF_MANAGED_CALLS). Sesuai dengan persyaratan dalam Compatibility Definition Document (CDD) Android (bagian 7.4.1.2), Anda harus memastikan aplikasi Telepon atau dialer Anda menampilkan entri log panggilan ini dan menunjukkan nama aplikasi panggilan pihak ketiga tempat panggilan berasal (untuk contoh cara aplikasi dialer AOSP memenuhi persyaratan ini, lihat Entri log panggilan dari aplikasi panggilan pihak ketiga).

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 situasi. Framework ini mencakup ketentuan untuk menyelesaikan jenis kasus ini.

Skenario

Anda harus mengubah aplikasi dialer untuk menangani skenario berikut.

Menangani panggilan masuk yang mengakhiri panggilan yang sedang berlangsung

Dalam skenario saat ada panggilan pihak ketiga yang sedang berlangsung (misalnya, dalam panggilan SuperCaller) yang tidak mendukung jeda, dan pengguna menerima panggilan seluler (misalnya, menggunakan FooCom operatornya), aplikasi 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 dalam gambar untuk melihat contohnya:

Panggilan masuk menghentikan panggilan pihak ketiga yang sedang berlangsung

Gambar 1. Panggilan masuk menghentikan panggilan pihak ketiga yang sedang berlangsung.

Aplikasi dialer 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 panggilan teleponnya terputus saat 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 dalam log panggilan sistem (lihat EXTRA_LOG_SELF_MANAGED_CALLS). Artinya, entri dalam log panggilan dapat berasal dari panggilan jaringan seluler atau tidak.

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:

Entri log panggilan dengan aplikasi panggilan pihak ketiga

Gambar 2. Entri log panggilan dengan nama aplikasi panggilan pihak ketiga di 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. Buat kueri TelecomManager untuk mendapatkan detail kelas PhoneAccount. Untuk menentukan apakah entri log panggilan berasal dari aplikasi panggilan pihak ketiga, periksa kemampuan PhoneAccount untuk melihat apakah CAPABILITY_SELF_MANAGED disetel.

Metode getLabel dari PhoneAccount yang ditampilkan akan menampilkan nama aplikasi yang terkait dengan entri log panggilan dari aplikasi panggilan pihak ketiga.

Kontrol integrasi log panggilan VoIP

Mulai Android 17 (level API 37), aplikasi panggilan VoIP pihak ketiga yang terintegrasi dengan Core-Telecom dan CallsManager dapat menulis histori panggilan mereka langsung ke log panggilan sistem Android native (CallLog.Calls).

Untuk memastikan privasi pengguna dan kebersihan data yang konsisten di seluruh ekosistem Android, semua perangkat Android 17 (level API 37) dan yang lebih tinggi yang mendeklarasikan tanda fitur telekomunikasi (android.software.telecom) dan memiliki peran android.app.role.DIALER harus mendukung kontrol integrasi log panggilan VoIP per aplikasi sesuai dengan Compatibility Definition Document (CDD) Android.

Persyaratan penerapan perangkat

Perangkat harus menyediakan layar Setelan yang dapat diakses pengguna (biasanya terletak di bagian Setelan > Akun panggilan > Log panggilan terintegrasi) yang memungkinkan pengguna melihat dan mengaktifkan/menonaktifkan integrasi log panggilan untuk setiap aplikasi VoIP pihak ketiga.

Untuk memenuhi persyaratan ini, Anda harus mengintegrasikan default platform stok:

  • Integrasi setelan platform: Pastikan perangkat Anda menyertakan com.android.phone.settings.PhoneAccountSettingsActivity yang disediakan oleh platform Android secara langsung (com.android.phone).
  • Persyaratan penyelesaian intent: Perangkat Anda harus menyelesaikan intent TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) ke layar pengelolaan platform bawaan.

Saat aplikasi, dialog sistem, atau deep link memanggil hal berikut, intent harus berhasil diluncurkan PhoneAccountSettingsActivity dan tidak boleh memunculkan ActivityNotFoundException:

Intent intent = new Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION);
context.startActivity(intent);

Validasi

Untuk menguji apakah perangkat Anda mendukung aplikasi panggilan pihak ketiga, gunakan aplikasi pengujian Telecomm, yang menerapkan class ConnectionService yang dikelola sendiri. Aplikasi berada di /packages/services/Telecomm/testapps/.

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

    mmma packages/services/Telecomm/testapps/

  2. Instal APK build menggunakan adb install -g -r <apk path>. Ikon Self-Managed Sample akan ditambahkan ke peluncur Anda.

  3. Ketuk ikon untuk membuka aplikasi pengujian.

Menangani panggilan masuk yang mengakhiri panggilan yang sedang berlangsung

Ikuti langkah-langkah berikut untuk memverifikasi bahwa panggilan masuk akan mengakhiri panggilan pihak ketiga yang sedang berlangsung.

Menguji aplikasi untuk aplikasi panggilan pihak ketiga

Gambar 3. Menguji aplikasi dengan penerapan contoh class ConnectionService.

  1. Hapus opsi Dapat ditahan.
  2. Ketuk KELUAR untuk memulai panggilan keluar contoh baru.
  3. Ketuk tombol AKTIF untuk mengaktifkan panggilan.
  4. Hubungi nomor telepon perangkat yang sedang diuji dengan ponsel lain. Hal ini memulai skenario saat aplikasi telepon Anda diberi nama aplikasi, yang akan terputus panggilannya.
  5. Setelah selesai, ketuk tombol DISCONNECT di aplikasi pengujian.

Entri log panggilan dari aplikasi panggilan pihak ketiga

Setelah menyelesaikan langkah-langkah di atas, aplikasi pengujian akan mencatat panggilan ke log panggilan sistem. Untuk mengonfirmasi bahwa perangkat mencatat panggilan dari aplikasi panggilan pihak ketiga, buka aplikasi dialer Anda dan konfirmasi bahwa panggilan muncul di log panggilan sistem.

Kontrol integrasi log panggilan VoIP

Untuk memverifikasi kepatuhan terhadap persyaratan maksud integrasi log panggilan VoIP di Android 17 dan yang lebih tinggi, jalankan pengujian CtsTelecomTestCases Compatibility Test Suite (CTS). Pengujian ini memverifikasi di seluruh batas paket bahwa pengiriman TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) diselesaikan di perangkat ke handler aktivitas yang diekspor yang valid (pemeriksaan resolveActivity).