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

VoIP ऐप्लिकेशन, अपने कॉल लॉग को सिस्टम कॉल लॉग में इंटिग्रेट कर सकते हैं. इससे उपयोगकर्ता, सिस्टम डायलर ऐप्लिकेशन में VoIP कॉल का इतिहास देख सकते हैं. साथ ही, डायलर ऐप्लिकेशन से सीधे कॉल वापस कर सकते हैं. इस गाइड में, 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 कॉन्टेंट प्रोवाइडर में 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 इंटेंट एक्स्ट्रा में शामिल होता है. इससे VoIP ऐप्लिकेशन को यह पता चलता है कि किस कॉल को वापस कॉल किया जा रहा है.

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

कॉल इतिहास की एकीकृत सेटिंग मैनेज करें

Android 17 (एपीआई लेवल 37) से, उपयोगकर्ता सिस्टम सेटिंग में जाकर, हर ऐप्लिकेशन के हिसाब से कॉल इतिहास को देख सकते हैं और उसे टॉगल कर सकते हैं. आम तौर पर, यह सुविधा सेटिंग > कॉलिंग खाते > इंटिग्रेटेड कॉल लॉग में उपलब्ध होती है. इसके अलावा, उपयोगकर्ता इसे सीधे तौर पर अपने डिफ़ॉल्ट डायलर ऐप्लिकेशन में भी ऐक्सेस कर सकते हैं. तीसरे पक्ष के कॉलिंग ऐप्लिकेशन और डायलर ऐप्लिकेशन, दोनों इन सेटिंग के साथ इंटरैक्ट कर सकते हैं.

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

val intent = Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION)
startActivity(intent)

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

प्राथमिकता में हुए बदलावों के बारे में सुनना

जब कोई उपयोगकर्ता सिस्टम सेटिंग या डायलर में जाकर, आपके कॉलिंग ऐप्लिकेशन के लिए कॉल इतिहास को सिंक करने की सुविधा चालू या बंद करता है, तब उसे सिंक रखने के लिए, TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE (android.telecom.action.VOIP_CALL_LOG_PREFERENCE) ब्रॉडकास्ट इंटेंट के लिए, ब्रॉडकास्ट रिसीवर रजिस्टर करें:

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE) {
            // Status of the Unified Call History of the app
            val isEnabled = intent.getBooleanExtra(
                TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS,
                true
            )
        }
    }
}

जब उपयोगकर्ता टॉगल को फ़्लिप करता है, तो प्लैटफ़ॉर्म इस इंटेंट को आपके ऐप्लिकेशन पर ब्रॉडकास्ट करता है. इसमें TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS एक्स्ट्रा में अपडेट की गई बूलियन स्थिति शामिल होती है. CallLog.Calls के ख़िलाफ़ समय-समय पर होने वाली पुष्टि का इंतज़ार करने के बजाय, आपका ऐप्लिकेशन इस ब्रॉडकास्ट को सुन सकता है. कॉल इतिहास को एक साथ देखने की सुविधा बंद होने पर (दूसरे शब्दों में कहें, तो false पर सेट होने पर), आपका ऐप्लिकेशन अपनी इंटरनल स्थिति को अपडेट कर सकता है या साफ़-सफ़ाई कर सकता है. जैसे, कॉल वापस आने की सुविधा के लिए इस्तेमाल की गई, स्थानीय तौर पर कैश मेमोरी में सेव की गई कॉल मैपिंग को मिटाना.