कॉल इतिहास को एक साथ देखने की सुविधा

VoIP ऐप्लिकेशन, अपने कॉल लॉग को सिस्टम कॉल लॉग में इंटिग्रेट कर सकते हैं. इससे उपयोगकर्ताओं को सिस्टम डायलर ऐप्लिकेशन में, वीओआईपी कॉल का इतिहास एक ही जगह पर देखने की सुविधा मिलती है. साथ ही, वे सीधे डायलर ऐप्लिकेशन से कॉल वापस कर सकते हैं. इस गाइड में, वीओआईपी कॉलिंग ऐप्लिकेशन और सिस्टम डायलर ऐप्लिकेशन में किए जाने वाले ज़रूरी बदलावों के बारे में बताया गया है.

कॉलिंग ऐप्लिकेशन में किए गए बदलाव

अपने VoIP ऐप्लिकेशन को सिस्टम कॉल लॉग के साथ इंटिग्रेट करने के लिए, यह तरीका अपनाएं.

कॉलबैक इंटेंट फ़िल्टर रजिस्टर करना

सिस्टम से सुरक्षित इंटेंट TelecomManager.ACTION_CALL_BACK को रजिस्टर करें.

इस इंटेंट फ़िल्टर के सही तरीके से रजिस्टर होने के बाद, आपके ऐप्लिकेशन से किए गए सभी कॉल अपने-आप लॉग हो जाएंगे. इसके लिए, CallsManager.addCall या Telecom से जुड़े अन्य एपीआई का इस्तेमाल किया जाता है. सिस्टम इस रजिस्टर किए गए इंटेंट का इस्तेमाल करता है. इससे, जब कोई उपयोगकर्ता कॉल वापस करने के लिए, डायलर में वीओआईपी कॉल लॉग एंट्री चुनता है, तब सिस्टम आपके ऐप्लिकेशन को कॉलबैक भेजता है.

<!-- 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>

कॉल लॉगिंग की सुविधा से बाहर निकलना

कॉल बैक की सुविधा रजिस्टर होने के बाद, सभी कॉल सिस्टम डायलर में लॉग हो जाते हैं. हर कॉल के आधार पर कॉल को बाहर रखने के लिए, CallAttributesCompat में isLogExcluded बूलियन को true पर सेट करें.

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
        ),
)

कॉलबैक मैनेज करना

CallsManager.addCall के ज़रिए जोड़े गए कॉल को CallControlScope.getCallId के ज़रिए एक यूनीक UUID मिलता है.

// 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)
        )
    )
}

कॉल लॉग की एंट्री की पुष्टि करना

सिस्टम कॉल लॉग में सीमित संख्या में एंट्री होती हैं. साथ ही, यह पुराने कॉल रिकॉर्ड मिटा देता है. ऐप्लिकेशन, कॉलबैक को मैनेज करने के लिए, UUID को कॉल की जानकारी के साथ मैप करता है. इसलिए, इसे समय-समय पर यह जांच करनी चाहिए कि सिस्टम कॉल लॉग में अब भी कौनसे UUID मौजूद हैं. अगर UUID अब सिस्टम लॉग में नहीं है, तो उपयोगकर्ता उस कॉल के लिए कॉलबैक शुरू नहीं कर सकता. साथ ही, ऐप्लिकेशन मैपिंग को अपनी लोकल स्टोरेज से सुरक्षित तरीके से हटा सकता है. इस तरीके से, स्टोरेज को ऑप्टिमाइज़ करने में मदद मिलती है.

सिस्टम लॉग में, ऐप्लिकेशन को असाइन किए गए मौजूदा UUID की सूची पाने के लिए, CallLog.Calls.CONTENT_VOIP_URI का इस्तेमाल करें.

डायल करने वाले ऐप्लिकेशन में बदलाव

डायल करने वाले ऐप्लिकेशन को वीओआईपी कॉल के लॉग दिखाने और वीओआईपी ऐप्लिकेशन को कॉल बैक करने की सुविधा चालू करने के लिए, यह तरीका अपनाएं.

डिफ़ॉल्ट डायलर ऐप्लिकेशन में वीओआईपी कॉल के लॉग दिखाना

डिफ़ॉल्ट रूप से, वीओआईपी ऐप्लिकेशन के कॉल लॉग, डायलर ऐप्लिकेशन में नहीं दिखते. इंटिग्रेट किए गए कॉल लॉग को डायलर ऐप्लिकेशन में दिखाने के लिए, यह तरीका अपनाएं:

  • Android 16.1 (एपीआई लेवल 36.1) पर, VoIP कॉल के लॉग दिखाने के लिए, include_voip_calls कॉन्टेंट प्रोवाइडर में include_voip_calls क्वेरी पैरामीटर जोड़ें:CallLog.Calls

    CallLog.Calls.CONTENT_URI.buildUpon()
        .appendQueryParameter("include_voip_calls", "true")
        .build()

  • Android 17 (एपीआई लेवल 37) और इसके बाद के वर्शन पर, कॉन्टेंट उपलब्ध कराने वाली इन कंपनियों और पैरामीटर की का इस्तेमाल करें:

डायल किए गए नंबरों पर कॉल बैक की सुविधा शुरू करना

डायल करने वाले व्यक्ति को वापस कॉल करने के लिए, TelecomManager.placeCall का इस्तेमाल करें. यह प्लैटफ़ॉर्म, कॉल लॉग एंट्री के यूनीक CallLog.Calls._ID का इस्तेमाल करके सही VoIP ऐप्लिकेशन लॉन्च करता है. इस लॉन्च में TelecomManager.ACTION_CALL_BACK इंटेंट शामिल होता है. यह सिस्टम की ओर से तय किया गया एक ऐक्शन है, जिसका इस्तेमाल कॉल बैक शुरू करने के लिए किया जाता है. इस इंटेंट में कॉल का UUID, इंटेंट एक्स्ट्रा TelecomManager.EXTRA_UUID में शामिल होता है. इससे वीओआईपी ऐप्लिकेशन को यह पता चलता है कि किस कॉल को वापस कॉल किया जा रहा है.

// 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)