Menerapkan Blokir Nomor Telepon

Karena telepon adalah saluran komunikasi terbuka - siapa pun dapat menelepon atau mengirim SMS ke nomor mana pun kapan saja - pengguna Android memerlukan kemampuan untuk dengan mudah memblokir panggilan dan SMS yang tidak diinginkan.

Sebelum N, pengguna Android harus bergantung pada aplikasi yang diunduh untuk membatasi panggilan dan SMS dari nomor telepon yang mengganggu. Banyak dari aplikasi tersebut tidak berfungsi sesuai keinginan atau memberikan pengalaman yang kurang ideal karena tidak ada API yang tepat untuk memblokir panggilan dan pesan.

Beberapa produsen mungkin langsung mengirimkan solusi pemblokiran mereka sendiri, namun jika pengguna berpindah perangkat, mereka mungkin kehilangan daftar pemblokiran sepenuhnya karena kurangnya interoperabilitas. Terakhir, meskipun pengguna menggunakan aplikasi panggilan dan klien perpesanan yang menyediakan fungsi tersebut, mereka mungkin masih harus melakukan tindakan pemblokiran di setiap aplikasi agar pemblokiran tersebut berlaku untuk panggilan dan SMS.

Fitur

Rilis Android 7.0 memperkenalkan penyedia konten BlockedNumberProvider yang menyimpan daftar nomor telepon yang telah ditentukan pengguna tidak dapat menghubungi mereka melalui komunikasi telepon (panggilan, SMS, MMS). Sistem akan menghormati nomor-nomor dalam daftar yang diblokir dengan membatasi panggilan dan SMS dari nomor-nomor tersebut. Android 7.0 menampilkan daftar nomor yang diblokir dan memungkinkan pengguna menambah dan menghapus nomor.

Lebih jauh lagi, fitur pemblokiran nomor memungkinkan sistem dan aplikasi relevan di platform bekerja sama untuk membantu melindungi pengguna dan menyederhanakan pengalaman. Dialer default, klien perpesanan default, aplikasi istimewa UICC, dan aplikasi dengan tanda tangan yang sama dengan sistem semuanya dapat langsung membaca 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, apa pun produsennya.

  • Pengguna dijamin memiliki fitur pemblokiran yang langsung berfungsi dan tidak akan kehilangan daftar blokirnya saat berpindah aplikasi atau mendapatkan ponsel baru. Semua aplikasi yang relevan di sistem dapat berbagi daftar yang sama untuk memberikan pengalaman paling efisien kepada pengguna.
  • Pengembang aplikasi tidak perlu mengembangkan caranya sendiri untuk mengelola daftar blokir serta panggilan dan pesan yang masuk. Mereka cukup menggunakan fitur yang disediakan platform.
  • Aplikasi dialer/messenger yang dipilih sebagai default oleh pengguna dapat membaca dan menulis ke penyedia. Aplikasi lain dapat meluncurkan antarmuka pengguna manajemen daftar blokir dengan menggunakan createManageBlockedNumbersIntent()
  • OEM dapat menggunakan fitur yang disediakan platform untuk mengirimkan fitur pemblokiran secara langsung. OEM dapat yakin bahwa ketika pengguna beralih dari perangkat OEM lain, mereka akan mendapatkan pengalaman orientasi yang lebih baik karena daftar blokir juga akan ditransfer.
  • Jika operator memiliki aplikasi dialer atau messenger sendiri, mereka dapat menggunakan kembali fitur platform untuk memungkinkan pengguna mempertahankan daftar blokir. Mereka dapat yakin bahwa daftar blokir pengguna akan tetap ada pada pengguna, bahkan ketika mereka mendapatkan perangkat baru. Terakhir, semua aplikasi yang memiliki hak istimewa operator dapat membaca daftar blokir, jadi jika operator ingin memberikan beberapa pemblokiran tambahan yang lebih kuat untuk pengguna berdasarkan daftar blokir, hal itu sekarang dapat dilakukan dengan fitur ini.

Aliran data

aliran data nomor blok

Gambar 1. Blokir aliran data nomor telepon

Contoh dan sumber

Berikut ini contoh panggilan yang menggunakan fitur baru pemblokiran nomor:

Luncurkan pengelola nomor yang diblokir dari aplikasi

Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);

Nomor kueri 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);

Hapus 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);

Penerapan

Ini adalah tugas tingkat tinggi yang harus diselesaikan agar fitur pemblokiran nomor dapat digunakan:

  • OEM menerapkan fitur pembatasan panggilan/pesan pada perangkat mereka dengan menggunakan BlockedNumberProvider
  • Jika operator memiliki aplikasi dialer atau messenger, terapkan fitur pembatasan panggilan/pesan dengan menggunakan BlockedNumberProvider
  • Vendor aplikasi dialer dan messenger pihak ketiga menggunakan BlockedNumberProvider untuk fitur pemblokirannya

Rekomendasi untuk OEM

Jika perangkat sebelumnya tidak pernah dikirimkan dengan fitur pembatasan panggilan/pesan tambahan, gunakan fitur pemblokiran nomor di Proyek Sumber Terbuka Android (AOSP) di semua perangkat tersebut. Disarankan agar titik masuk yang masuk akal 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 tersebut sehingga semua nomor telepon yang diblokir disimpan di BlockedNumberProvider, dan perilaku di sekitar penyedia memenuhi persyaratan untuk fitur ini yang diuraikan dalam Kompatibilitas Android Dokumen Definisi (CDD).

Fitur lanjutan lainnya dapat diterapkan melalui penyedia khusus dan UI/kontrol khusus, selama persyaratan CDD dipenuhi sehubungan dengan pemblokiran nomor telepon yang sangat cocok. Disarankan agar fitur-fitur lain tersebut diberi label sebagai fitur “lanjutan” untuk menghindari kebingungan dengan fitur dasar pemblokiran nomor.

Lebah

Berikut adalah API yang digunakan:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Silakan merujuk ke BlockedNumberContract
    • API 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 apa adanya. Pelaksana perangkat juga dapat mengimplementasikan versi UI mereka sendiri, selama versi tersebut memenuhi persyaratan CDD terkait.

Perlu diketahui, aplikasi PC mitra untuk pencadangan dan pemulihan mungkin diperlukan untuk menerapkan pemulihan daftar blokir dengan menggunakan BlockedNumberProvider . Lihat gambar di bawah untuk antarmuka nomor yang diblokir yang disediakan di AOSP.

antarmuka pengguna nomor blok

Gambar 2. Antarmuka pengguna blok 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 . Misalnya:

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