Karena telepon adalah saluran komunikasi yang terbuka - siapa saja dapat menelepon atau mengirim SMS ke nomor mana pun kapan saja - pengguna Android memerlukan kemampuan untuk memblokir panggilan dan SMS yang tidak diinginkan dengan mudah.
Sebelum Android 7.0, pengguna Android harus mengandalkan aplikasi yang didownload untuk membatasi panggilan dan pesan dari nomor telepon yang mengganggu. Banyak aplikasi tersebut tidak berfungsi seperti yang diinginkan atau memberikan pengalaman yang kurang ideal karena tidak ada API yang tepat untuk memblokir panggilan dan pesan.
Beberapa produsen mungkin mengirimkan solusi pemblokiran mereka sendiri secara langsung, tetapi jika pengguna beralih perangkat, mereka mungkin kehilangan daftar yang diblokir sepenuhnya karena tidak adanya interoperabilitas. Terakhir, meskipun pengguna menggunakan aplikasi panggilan dan klien pesan yang menyediakan fungsi tersebut, mereka mungkin masih harus melakukan tindakan pemblokiran di setiap aplikasi agar pemblokiran berlaku untuk panggilan dan SMS.
Fitur
Rilis Android 7.0 memperkenalkan penyedia konten
BlockedNumberProvider
yang menyimpan daftar nomor telepon yang telah ditentukan pengguna agar tidak
dapat menghubungi mereka melalui komunikasi telepon (panggilan, SMS, MMS). Sistem
akan mematuhi nomor dalam daftar yang diblokir dengan membatasi panggilan dan
SMS dari nomor tersebut. Android 7.0 menampilkan daftar nomor yang diblokir dan
memungkinkan pengguna menambahkan serta menghapus nomor.
Selain itu, fitur pemblokiran nomor memungkinkan sistem dan aplikasi yang relevan di platform untuk bekerja sama guna membantu melindungi pengguna dan menyederhanakan pengalaman. Perangkat telepon default, klien pesan default, aplikasi dengan hak istimewa UICC, dan aplikasi dengan tanda tangan yang sama dengan sistem semuanya dapat langsung membaca dari dan menulis ke daftar yang diblokir. Karena nomor yang diblokir disimpan di sistem, apa pun aplikasi panggilan atau pesan yang digunakan pengguna, nomor tersebut tetap diblokir. Terakhir, daftar nomor yang diblokir dapat dipulihkan di perangkat baru apa pun, terlepas dari produsennya.
- Pengguna akan dijamin memiliki fitur pemblokiran yang berfungsi secara otomatis dan tidak akan kehilangan daftar blokir saat beralih aplikasi atau mendapatkan ponsel baru. Semua aplikasi yang relevan di sistem dapat berbagi daftar yang sama untuk memberikan pengalaman yang paling sederhana kepada pengguna.
- Developer aplikasi tidak perlu mengembangkan cara mereka sendiri untuk mengelola daftar blokir serta panggilan dan pesan yang masuk. Mereka cukup menggunakan fitur yang disediakan platform.
- Aplikasi telepon / messenger yang dipilih sebagai default oleh pengguna dapat
membaca dan menulis ke penyedia. Aplikasi lain dapat meluncurkan antarmuka pengguna pengelolaan daftar yang tidak diizinkan
menggunakan
createManageBlockedNumbersIntent()
- OEM dapat menggunakan fitur yang disediakan platform untuk mengirimkan fitur pemblokiran secara langsung. OEM dapat yakin bahwa saat pengguna beralih dari perangkat OEM lain, mereka akan memiliki pengalaman orientasi yang lebih baik karena daftar blokir juga akan ditransfer.
- Jika operator memiliki aplikasi telepon atau pesan mereka sendiri, mereka dapat menggunakan kembali fitur platform untuk mengizinkan pengguna mengelola daftar blokir. Mereka dapat yakin bahwa daftar blokir pengguna dapat tetap bersama pengguna, meskipun mereka mendapatkan perangkat baru. Terakhir, semua aplikasi dengan hak istimewa operator dapat membaca daftar blokir, sehingga jika operator ingin memberikan beberapa pemblokiran tambahan yang lebih canggih untuk pengguna berdasarkan daftar blokir, hal itu kini dapat dilakukan dengan fitur ini.
Aliran data

Gambar 1. Memblokir aliran data nomor telepon
Contoh dan sumber
Berikut adalah contoh panggilan yang menggunakan fitur baru pemblokiran nomor:
Meluncurkan pengelola nomor yang diblokir dari aplikasi
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
Mengkueri nomor yang diblokir
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
Masukkan nomor yang diblokir
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Menghapus nomor yang diblokir
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);
Implementasi
Berikut adalah tugas tingkat tinggi yang harus diselesaikan untuk menggunakan fitur pemblokiran nomor:
- OEM menerapkan fitur pembatasan panggilan/pesan di perangkat mereka dengan menggunakan
BlockedNumberProvider
- Jika operator memiliki aplikasi telepon atau messenger, terapkan fitur
pembatasan panggilan/pesan menggunakan
BlockedNumberProvider
- Vendor aplikasi telepon dan pesan pihak ketiga menggunakan
BlockedNumberProvider
untuk fitur pemblokiran mereka
Rekomendasi untuk OEM
Jika perangkat sebelumnya tidak pernah dikirimkan dengan fitur pembatasan panggilan/pesan tambahan, gunakan fitur pemblokiran nomor di Project Open Source Android (AOSP) di semua perangkat tersebut. Sebaiknya titik entri yang wajar untuk pemblokiran didukung, seperti memblokir nomor langsung dari log panggilan atau dalam rangkaian pesan.
Jika perangkat sebelumnya dikirimkan dengan fitur pembatasan panggilan/pesan,
sesuaikan fitur sehingga semua nomor telepon kecocokan ketat yang diblokir
disimpan di BlockedNumberProvider,
dan perilaku
di sekitar penyedia memenuhi persyaratan untuk fitur ini yang diuraikan dalam
Dokumen Definisi Kompatibilitas Android (CDD).
Fitur lanjutan lainnya dapat diterapkan melalui penyedia kustom dan UI/kontrol kustom, selama persyaratan CDD terpenuhi sehubungan dengan pemblokiran nomor telepon yang cocok secara ketat. Sebaiknya fitur lain tersebut dilabeli sebagai fitur “lanjutan” untuk menghindari kebingungan dengan fitur pemblokiran nomor dasar.
API
Berikut adalah API yang digunakan:
TelecomManager API
Intent createManageBlockedNumbersIntent()
Carrier Config
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
- Lihat
BlockedNumberContract
- API yang disediakan oleh
BlockedNumberContract
boolean isBlocked(Context context, String phoneNumber)
int unblock(Context context, String phoneNumber)
boolean canCurrentUserBlockNumbers(Context context)
- API yang disediakan oleh
Antarmuka pengguna
Antarmuka pengguna BlockedNumbersActivity.java yang disediakan di AOSP dapat digunakan begitu saja. Implementator perangkat juga dapat menerapkan versi UI mereka sendiri, selama memenuhi persyaratan CDD terkait.
Perlu diketahui, aplikasi PC partner untuk pencadangan dan pemulihan mungkin diperlukan
untuk menerapkan pemulihan daftar blokir menggunakan
BlockedNumberProvider
. Lihat gambar di bawah untuk antarmuka nomor
yang diblokir yang disediakan di AOSP.

Gambar 2. Antarmuka pengguna pemblokiran nomor telepon
Validasi
Implementer dapat memastikan versi fitur mereka berfungsi sebagaimana mestinya dengan menjalankan pengujian CTS berikut:
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
BlockedNumberProvider
dapat dimanipulasi menggunakan perintah adb
setelah menjalankan $ adb root
. Contoh:
adb root
adb shell content query --uri content://com.android.blockednumber/blocked
adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'
adb shell content delete --uri / content://com.android.blockednumber/blocked/1