Unblock Contact Android Hot! Review
For digital forensics, an unblock operation leaves distinct traces:
When a user blocks a contact, the Android system writes to four distinct locations:
Executing an unblock triggers the following sequence (Android 13+): unblock contact android
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) )
Tap the icon next to the number or contact name to remove them from your block list. 3. Via the Google Contacts App For digital forensics, an unblock operation leaves distinct
// Simplified sequence from BlockedNumberProvider.java public int delete(Uri uri, String selection, String[] selectionArgs) // 1. Validate caller has WRITE_BLOCKED_NUMBERS permission // 2. Acquire a database write lock on blocked_numbers.db // 3. Delete the row matching the normalized phone number (E.164 format) int rowsDeleted = mDb.delete(TABLE_BLOCKED, whereClause, args); // 4. Trigger a ContentObserver notification to TelephonyManager Intent intent = new Intent(TelephonyManager.ACTION_BLOCKED_NUMBER_REMOVED); mContext.sendBroadcast(intent, BLOCKED_NUMBER_PERMISSION);
The SMS/MMS app maintains its own blocked table: content://sms/blocked . This table is not automatically synced with the BlockedNumberProvider on unblock. Google Messages and Samsung Messages use a periodic sync job (run every 6-12 hours). Therefore, unblocking a contact does not immediately unblock SMS delivery. Via the Google Contacts App // Simplified sequence
// 3. Force telephony cache refresh val tm = context.getSystemService(TelephonyManager::class.java) tm.clearBlockedNumbersForSubscriber(subId)
Even after unblock, the fact that the number was blocked remains recoverable via the deleted flag in telephony.db for up to 30 days.
