| Android Version | UI-to-Cache Invalidation | SMS Delivery Resume | Full System Consistency | | :--- | :--- | :--- | :--- | | Android 12 | 210 ms | 6-12 hours | 45 min | | Android 13 | 85 ms | 2-4 hours | 15 min | | Android 14 (w/ RCS) | 62 ms | 5 min (via RCS sync) | 2 min | | Android 15 (Beta) | 48 ms | Real-time (via push) | 30 sec |
| Storage Location | URI / Path | Purpose | | :--- | :--- | :--- | | | content://com.android.blockednumber/blocked | Primary source of truth for telephony. | | Contacts DB | data/data/com.android.providers.contacts/databases/contacts.db (Table: raw_contacts ) | Marks STARRED (0) and CUSTOM_RINGTONE (null) but also flags CONTACT_STATUS for blocked. | | Call Log | content://call_log/calls | Adds CALL_BLOCK_REASON column (Value: 1 for user block). | | SMS Provider | content://sms/blocked | Isolated blocking for Messaging app. | unblock contact android
// 3. Force telephony cache refresh val tm = context.getSystemService(TelephonyManager::class.java) tm.clearBlockedNumbersForSubscriber(subId) | Android Version | UI-to-Cache Invalidation | SMS
When you unblock a contact, the system resets the local flags but does reset the SafetyNet score. Consequently, the unblocked contact may still be routed to "Spam & Blocked" folder for 2-7 days until the local spam confidence score decays. | | SMS Provider | content://sms/blocked | Isolated
// Delete from telephony provider context.contentResolver.delete(BlockedNumbers.CONTENT_URI, ...) // Also delete from SMS provider context.contentResolver.delete(Uri.parse("content://sms/blocked"), ...) // Force sync via Carrier Messaging Client SmsManager.getDefault().clearBlockedNumberForSubscriber(subId, phoneNumber) Carrier Call Filtering: For RCS (Rich Communication Services) and VoLTE, carriers (T-Mobile, Verizon, Jio) maintain their own block list on the IMS core. When a user unblocks a contact on Android, the OS sends a CarrierConfigManager update via the TelephonyManager . However, if the carrier's network has a stale cache, the number remains blocked at the network level for up to 24 hours .
fun fullyUnblockContact(context: Context, phoneNumber: String, subId: Int) val normalized = PhoneNumberUtils.normalizeNumber(phoneNumber) // 1. Delete from system blocked provider context.contentResolver.delete( BlockedNumbers.CONTENT_URI, "number = ?", arrayOf(normalized) )
// 5. Force a refresh of the in-memory call screening cache CallScreeningService.onBlockedNumbersChanged();