Menerapkan pemblokiran nomor telepon

Karena telepon adalah saluran komunikasi yang terbuka, siapa pun dapat menelepon atau teks nomor berapa saja setiap saat - pengguna Android memerlukan kemampuan untuk memblokir panggilan dan pesan teks yang tidak diinginkan.

Sebelum Android 7.0, pengguna Android harus mengandalkan aplikasi yang diunduh untuk membatasi panggilan dan teks dari nomor telepon yang mengganggu. Banyak dari aplikasi tersebut tidak berfungsi sebagai menginginkan 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 kurangnya 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 konten BlockedNumberProvider penyedia yang menyimpan daftar nomor telepon yang telah ditetapkan pengguna tidak boleh dapat menghubungi mereka melalui komunikasi telepon (panggilan, SMS, MMS). Tujuan sistem akan menerima nomor dalam daftar yang diblokir dengan membatasi panggilan dan teks dari angka tersebut. Android 7.0 menampilkan daftar nomor yang diblokir dan memungkinkan pengguna menambahkan dan menghapus nomor.

Selanjutnya, fitur pemblokir nomor memungkinkan sistem dan aplikasi yang relevan di platform untuk bekerja sama guna membantu melindungi pengguna dan menyederhanakan pengalaman yang lancar bagi developer. Telepon default, klien pesan default, aplikasi dengan hak istimewa UICC, dan aplikasi dengan tanda tangan yang sama dengan sistem dapat langsung membaca dan menulis ke daftar yang diblokir. Karena nomor yang diblokir disimpan di sistem, tidak peduli aplikasi panggilan atau pesan apa yang digunakan pengguna, angka 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 pada sistem dapat berbagi daftar yang sama untuk memberi pengguna pengalaman yang paling efisien.
  • Developer aplikasi tidak perlu mengembangkan caranya sendiri untuk mengelola daftar blokir serta panggilan dan pesan yang masuk. Mereka cukup menggunakan yang disediakan platform ini.
  • 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 dengan 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 messenger sendiri, mereka dapat menggunakan kembali platform yang memungkinkan pengguna untuk mengelola daftar blokir. Mereka tidak perlu khawatir bahwa daftar blokir pengguna itu dapat tetap berada di samping pengguna, bahkan ketika mereka mendapatkan perangkat seluler. Terakhir, semua aplikasi dengan hak istimewa operator dapat membaca daftar blokir, jadi jika operator ingin menyediakan beberapa pemblokiran tambahan yang lebih kuat bagi pengguna berdasarkan daftar blokir, yang sekarang bisa dilakukan dengan fitur ini.

Aliran data

aliran data blokir nomor

Gambar 1. Blokir aliran data nomor telepon

Contoh dan sumber

Berikut ini contoh panggilan yang menggunakan fitur baru pemblokir nomor:

Meluncurkan pengelola nomor yang diblokir dari aplikasi

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

Kueri untuk 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);

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

Implementasi

Ini adalah tugas tingkat tinggi yang harus diselesaikan untuk fitur yang dapat digunakan:

  • OEM menerapkan fitur pembatasan panggilan/pesan di perangkat mereka menggunakan BlockedNumberProvider
  • Jika operator memiliki aplikasi telepon atau messenger, implementasikan panggilan/pesan fitur pembatasan menggunakan BlockedNumberProvider
  • Vendor aplikasi telepon dan messenger pihak ketiga menggunakan BlockedNumberProvider untuk fitur pemblokirannya

Rekomendasi untuk OEM

Jika perangkat sebelumnya tidak pernah dikirim dengan panggilan/pesan tambahan fitur pembatasan, gunakan fitur pemblokir nomor di Android Open Source Project (AOSP) di semua perangkat tersebut. Sebaiknya entri yang wajar titik untuk pemblokiran didukung, seperti memblokir nomor langsung dari panggilan atau dalam rangkaian pesan.

Jika perangkat sebelumnya telah dikirim dengan fitur pembatasan panggilan/pesan, menyesuaikan fitur sehingga semua nomor telepon yang cocok dengan aturan ketat yang diblokir disimpan di BlockedNumberProvider, dan perilakunya seputar penyedia memenuhi persyaratan untuk fitur ini yang diuraikan dalam Compatibility Definition Document (CDD) Android.

Fitur lanjutan lainnya dapat diterapkan melalui penyedia kustom dan UI kustom / kontrol yang lebih tinggi, selama persyaratan CDD terpenuhi terkait memblokir nomor telepon yang dicocokkan secara ketat. Disarankan agar fitur lain tersebut diberi label sebagai fitur “lanjutan” untuk menghindari kebingungan dengan fitur pemblokir nomor.

API

Berikut adalah API yang digunakan:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Harap lihat 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 sebagai alamat IP internalnya. Pengimplementasi perangkat juga bisa mengimplementasikan versi UI mereka sendiri, selama memenuhi persyaratan CDD terkait.

Perhatikan bahwa aplikasi PC partner untuk pencadangan dan pemulihan mungkin diperlukan untuk mengimplementasikan pemulihan daftar blok dengan menggunakan BlockedNumberProvider. Lihat gambar di bawah untuk konten yang diblokir yang disediakan dalam AOSP.

antarmuka pengguna blokir angka

Gambar 2. Blokir antarmuka pengguna nomor telepon

Validasi

Pelaksana dapat memastikan versi fitur mereka berfungsi sebagaimana mestinya oleh menjalankan uji 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