Birleştirilmiş çağrı geçmişi

VoIP uygulamaları, aramalarını sistem arama kaydına entegre edebilir. Bu sayede kullanıcılar, VoIP görüşmesi geçmişlerini sistem numara çevirici uygulamasında merkezi olarak görebilir ve aramaları doğrudan numara çevirici uygulamasından geri çevirebilir. Bu kılavuzda, VoIP görüşmesi uygulamalarında ve sistem numara çevirici uygulamalarında yapılması gereken değişiklikler açıklanmaktadır.

Arama uygulamasında yapılan değişiklikler

VoIP uygulamanızı sistem görüşme günlüğüyle entegre etmek için aşağıdaki adımları uygulayın.

Geri arama intent filtresini kaydetme

Sistem tarafından korunan amaç filtresini TelecomManager.ACTION_CALL_BACK kaydedin.

Bu amaç filtresi düzgün bir şekilde kaydedildikten sonra, uygulamanızın CallsManager.addCall veya diğer ilgili Telecom API'lerini kullanarak eklediği tüm aramalar sistem tarafından otomatik olarak kaydedilir. Sistem, bu kayıtlı niyeti kullanarak daha sonra kullanıcı, aramayı geri döndürmek için çeviricide bir VoIP arama günlüğü girişi seçtiğinde uygulamanıza geri çağırma işlevi gönderir.

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

Arama kaydını hariç tutma

Geri arama kaydedildikten sonra tüm aramalar sistem çeviricisinde günlüğe kaydedilir. Aramaları tek tek hariç tutmak için isLogExcluded boolean değerini CallAttributesCompat içinde true olarak ayarlayın.

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

Geri aramaları yönetme

CallsManager.addCall üzerinden eklenen aramalar, CallControlScope.getCallId aracılığıyla benzersiz bir UUID alır.

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

Arama kaydı girişlerini doğrulama

Sistem arama kaydı, sınırlı sayıda giriş tutar ve sonunda eski arama kayıtlarını siler. Uygulama, geri arama işleme için UUID'ların arama ayrıntılarıyla eşlemesini sakladığından, sistem arama günlüğünde hangi UUID'ların hala mevcut olduğunu düzenli olarak kontrol etmelidir. Bir UUID artık sistem günlüğünde yoksa kullanıcı bu arama için geri arama başlatamaz ve uygulama, eşlemeyi yerel depolama alanından güvenli bir şekilde kaldırabilir. Bu uygulama, depolama alanını optimize etmeye yardımcı olur.

Sistem günlüğünde uygulamayla ilişkilendirilen mevcut UUID listesini almak için CallLog.Calls.CONTENT_VOIP_URI kullanın.

Numara çevirici uygulamasında yapılan değişiklikler

Çevirici uygulamasının VoIP görüşmesi günlüklerini göstermesini ve VoIP uygulamalarına geri arama başlatmasını sağlamak için aşağıdaki adımları uygulayın.

Numara çevirici uygulamasında VoIP görüşmesi günlüklerini görüntüleme

Varsayılan olarak, VoIP uygulamalarının arama kayıtları numara çevirici uygulamasında görünmez. Entegre arama kayıtlarını numara çevirici uygulamasında göstermek için aşağıdakileri yapın:

  • Android 16.1'de (API düzeyi 36.1), VoIP görüşmesi günlüklerini göstermek için içerik sağlayıcıya include_voip_calls sorgu parametresini ekleyin:CallLog.Calls

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

  • Android 17 (API düzeyi 37) ve sonraki sürümlerde aşağıdaki resmîleştirilmiş içerik sağlayıcıyı ve parametre anahtarını kullanın:

Numara çevirici uygulamasından geri aramaları başlatma

Çeviriciden geri arama başlatmak için TelecomManager.placeCall simgesini kullanın. Platform, doğru VoIP uygulamasını başlatmak için arama kaydı girişinin benzersiz CallLog.Calls._ID değerini kullanır. Bu başlatma işlemine, geri arama başlatmak için sistem tarafından tanımlanan bir işlem olan TelecomManager.ACTION_CALL_BACK intenti dahildir. Bu amaç, TelecomManager.EXTRA_UUID amaç ekstrasında görüşmenin UUID bilgisini içerir. Böylece VoIP uygulaması, hangi görüşmenin geri arandığını belirleyebilir.

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