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 çevirici uygulamasında merkezi olarak görebilir ve doğrudan çevirici uygulamasından aramaları geri çevirebilir. Bu kılavuzda, VoIP görüşmesi uygulamalarında, sistem çevirici uygulamalarında ve birleştirilmiş arama geçmişi ayarlarını yönetmede yapılması gereken değişiklikler açıklanmaktadır.

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

VoIP uygulamanızı sistem arama 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 intent filtresi düzgün ş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, kullanıcı çeviricide bir VoIP görüşmesi günlük girişini seçerek aramayı geri döndürdüğünde uygulamanıza geri arama göndermek için bu kayıtlı amaçtan yararlanır.

<!-- 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 çeviricisine kaydedilir. Aramaları arama bazında hariç tutmak için CallAttributesCompat içinde isLogExcluded boolean değerini 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 günlüğü girişlerini doğrulama

Sistem arama kaydı, sınırlı sayıda giriş tutar ve sonunda eski arama kayıtlarını temizler. Uygulama, geri arama işleme için UUID'ların arama ayrıntılarıyla eşlemesini sakladığından sistem arama kaydında hangi UUID'ların hâlâ 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 etmenize yardımcı olur.

Sistem günlüğünde uygulamayla ilişkilendirilen UUID'lerin mevcut 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 kayıtlarını gösterme

Varsayılan olarak, VoIP uygulaması görüşme kayıtları numara çevirici uygulamasında görünmez. Entegre görüşme 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örüntülemek için CallLog.Callsiçerik sağlayıcıya sorgu parametresini ekleyin: include_voip_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, geri arama başlatmak için sistem tarafından tanımlanan bir işlem olan TelecomManager.ACTION_CALL_BACK amacını içerir. 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)

Birleştirilmiş arama geçmişi ayarlarını yönetme

Android 17'den (API düzeyi 37) itibaren kullanıcılar, sistem ayarlarında (genellikle Ayarlar > Arama hesapları > Entegre arama günlükleri altında veya doğrudan varsayılan çevirici uygulamalarında) birleştirilmiş arama geçmişini uygulama bazında görüntüleyip etkinleştirebilir veya devre dışı bırakabilir. Hem üçüncü taraf arama uygulamaları hem de çevirici uygulamaları bu ayarlarla etkileşime geçebilir.

Birleştirilmiş arama geçmişi ayarlarını açmak için TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION intent işlemiyle bir etkinlik başlatın:

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

Bir kullanıcı, sistem ayarlarında bir uygulama için birleştirilmiş arama geçmişini devre dışı bıraktığında sistem, bu pakete ait mevcut tüm arama kaydı girişlerini yerel arama kaydı sağlayıcısından (CallLog.Calls) hemen ve kalıcı olarak temizler. Bu uygulama tarafından başlatılan veya bu uygulama için alınan gelecekteki aramalar, sistem çeviricisinde kaydedilmez.

Tercih değişikliklerini dinleme

Kullanıcı, sistem ayarlarında veya çeviricide arama uygulamanız için birleştirilmiş arama geçmişini etkinleştirdiğinde ya da devre dışı bıraktığında senkronize kalmak üzere TelecomManager.ACTION_VOIP_CALL_LOG_PREFERENCE (android.telecom.action.VOIP_CALL_LOG_PREFERENCE) yayın intent'i için bir yayın alıcısı kaydedin:

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

Kullanıcı açma/kapatma düğmesini değiştirdiğinde platform, bu amacı TelecomManager.EXTRA_VOIP_CALL_LOG_PREFERENCE_STATUS ekstrasında güncellenmiş boole durumuyla birlikte uygulamanıza yayınlar. CallLog.Calls ile düzenli doğrulama yapılmasını beklemek yerine uygulamanız bu yayını dinleyebilir. Birleştirilmiş arama geçmişi devre dışı bırakıldığında (diğer bir deyişle false olarak ayarlandığında) uygulamanız, dahili durumunu güncelleyebilir veya geri arama işleme için kullanılan, yerel olarak önbelleğe alınmış arama eşlemelerini temizleme gibi temizleme işlemleri gerçekleştirebilir.