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, sistem numara ç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 görüşme kaydıyla entegre etmek için aşağıdaki adımları uygulayın.

Geri arama intent filtresini kaydetme

Sistem tarafından korunan amacı kaydedin TelecomManager.ACTION_CALL_BACK.

Bu amaç 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, bu kayıtlı intent'i kullanarak daha sonra kullanıcı, arama yapmak için Çevirici'de bir VoIP arama kaydı günlük girişi seçtiğinde uygulamanıza geri arama göndermek için kullanı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 arama motoruna 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 aranacak UUID'ların 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 etmenize 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örüntülemek 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.Calls içerik sağlayıcıya include_voip_calls sorgu parametresini ekleyin:

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

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. Hem üçüncü taraf arama uygulamaları hem de çevirici uygulamaları bu ayarlarla etkileşime girebilir.

Birleştirilmiş arama geçmişi ayarlarını açmak için TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION amaç 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) anında 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

Bir 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 için 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 ilgili periyodik doğrulama işlemini 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 kendi iç 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.