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

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 का इस्तेमाल करें.

डायल करने वाले ऐप्लिकेशन से जुड़े बदलाव

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

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

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

  • 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 पर सेट होने पर), आपका ऐप्लिकेशन अपनी इंटरनल स्टेट को अपडेट कर सकता है या क्लीनअप कर सकता है. जैसे, कॉलबैक हैंडलिंग के लिए इस्तेमाल की गई, स्थानीय तौर पर कैश मेमोरी में सेव की गई कॉल मैपिंग को मिटाना.