Aplikasi VoIP dapat mengintegrasikan panggilannya ke log panggilan sistem. Hal ini memungkinkan pengguna melihat histori panggilan VoIP mereka secara terpusat di aplikasi dialer sistem dan melakukan panggilan balik langsung dari aplikasi dialer. Panduan ini menjelaskan perubahan yang diperlukan pada aplikasi panggilan VoIP dan aplikasi dialer sistem.
Perubahan untuk aplikasi panggilan
Untuk mengintegrasikan aplikasi VoIP Anda dengan log panggilan sistem, ikuti langkah-langkah berikut.
Mendaftarkan filter intent callback
Daftarkan intent yang dilindungi sistem TelecomManager.ACTION_CALL_BACK.
Setelah filter intent ini didaftarkan dengan benar, setiap panggilan yang ditambahkan aplikasi Anda menggunakan
CallsManager.addCall atau API Telecom terkait lainnya akan otomatis
dicatat oleh sistem. Sistem menggunakan intent terdaftar ini untuk mengirimkan callback ke aplikasi Anda nanti saat pengguna memilih entri log panggilan VoIP di aplikasi telepon untuk melakukan panggilan balik.
<!-- Activity to handle the callback intent from the system dialer --> <activity android:name=".VoipCallActivity" android:exported="true"> <!-- Register callback intent --> <intent-filter> <action android:name="android.telecom.action.CALL_BACK" /> </intent-filter> </activity>
Mengecualikan logging panggilan
Setelah callback didaftarkan, semua panggilan akan dicatat ke dialer sistem. Untuk mengecualikan panggilan berdasarkan per panggilan, tetapkan boolean isLogExcluded
ke true dalam CallAttributesCompat.
CallAttributesCompat( displayName = displayName, address = address, isLogExcluded = excludeCallLogging, // to exclude call from logging direction = if (isIncoming) { CallAttributesCompat.DIRECTION_INCOMING } else { CallAttributesCompat.DIRECTION_OUTGOING }, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = ( CallAttributesCompat.SUPPORTS_SET_INACTIVE or CallAttributesCompat.SUPPORTS_STREAM or CallAttributesCompat.SUPPORTS_TRANSFER ), )
Menangani callback
Panggilan yang ditambahkan melalui CallsManager.addCall akan mendapatkan UUID unik melalui
CallControlScope.getCallId.
// check the intent action for CALL_BACK if (intent.action == TelecomManager.ACTION_CALL_BACK) { launchCall( // fetching stored call details for the UUID to initiate callback callDetails = getCallDetails( uuid = intent.getStringExtra(TelecomManager.EXTRA_UUID) ) ) }
Memverifikasi entri log panggilan
Log panggilan sistem menyimpan sejumlah entri terbatas dan pada akhirnya
menghapus catatan panggilan lama. Karena aplikasi menyimpan pemetaan UUID ke detail panggilan untuk penanganan callback, aplikasi harus memeriksa secara berkala UUID mana yang masih ada di log panggilan sistem. Jika UUID tidak lagi ada dalam log sistem, pengguna tidak dapat memulai callback untuk panggilan tersebut, dan aplikasi dapat menghapus pemetaan dengan aman dari penyimpanan lokalnya. Praktik ini membantu
mengoptimalkan penyimpanan.
Untuk mendapatkan daftar UUID saat ini yang diatribusikan ke aplikasi dalam log
sistem, gunakan CallLog.Calls.CONTENT_VOIP_URI.
Perubahan untuk aplikasi dialer
Ikuti langkah-langkah berikut untuk mengaktifkan aplikasi dialer agar menampilkan log panggilan VoIP dan memulai panggilan balik ke aplikasi VoIP.
Menampilkan log panggilan VoIP di aplikasi telepon
Secara default, log panggilan aplikasi VoIP tidak muncul di aplikasi telepon. Untuk menampilkan log panggilan terintegrasi di aplikasi telepon, lakukan hal berikut:
Di Android 16.1 (level API 36.1), tambahkan parameter kueri
include_voip_callske penyedia kontenCallLog.Callsuntuk menampilkan log panggilan VoIP:CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
Di Android 17 (level API 37) dan yang lebih tinggi, gunakan penyedia konten dan kunci parameter yang diformalkan berikut:
Memulai panggilan balik dari aplikasi dialer
Untuk memulai callback dari dialer, gunakan TelecomManager.placeCall. Platform
menggunakan CallLog.Calls._ID unik entri log panggilan untuk meluncurkan
aplikasi VoIP yang benar. Peluncuran ini mencakup intent
TelecomManager.ACTION_CALL_BACK, yang merupakan tindakan yang ditentukan sistem
untuk memulai panggilan balik. Intent ini berisi UUID panggilan di
ekstra intent TelecomManager.EXTRA_UUID, sehingga aplikasi VoIP dapat mengidentifikasi
panggilan spesifik mana yang dipanggil balik.
// Uri generated with unique ID of the call log entry to launch the respective VoIP app for callback val address = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, callId) // extra information required to initiate callback val extras = Bundle() telecomManager.placeCall(address, extras)