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_callsCallLog.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.
Kullanıcıları ayarlara yönlendirme
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.