Menerapkan pemblokiran nomor telepon

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

aliran data blokir nomor

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)

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.

antarmuka pengguna blokir nomor

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