Triển khai tính năng chặn số điện thoại

Do hệ thống điện thoại là một kênh liên lạc mở nên bất kỳ ai cũng có thể gọi điện hoặc nhắn tin bất kỳ số nào vào bất kỳ lúc nào - Người dùng Android cần có khả năng dễ dàng chặn các cuộc gọi và tin nhắn văn bản không mong muốn.

Trước Android 7.0, người dùng Android phải dựa vào các ứng dụng đã tải xuống để hạn chế cuộc gọi và tin nhắn văn bản từ các số điện thoại gây phiền toái. Nhiều ứng dụng trong số đó không hoạt động dưới dạng mong muốn hoặc cung cấp trải nghiệm kém lý tưởng hơn vì không có API phù hợp để chặn cuộc gọi và tin nhắn.

Một số nhà sản xuất có thể sử dụng ngay giải pháp chặn của riêng họ, nhưng nếu người dùng chuyển đổi thiết bị, họ có thể mất hoàn toàn danh sách chặn do thiếu về khả năng tương tác. Cuối cùng, ngay cả khi người dùng đang sử dụng ứng dụng quay số và ứng dụng nhắn tin cung cấp chức năng như vậy, thì có thể họ vẫn phải thực hiện thao tác chặn trong mỗi ứng dụng để thao tác chặn có hiệu lực cho cả hai gọi điện và nhắn tin.

Tính năng

Bản phát hành Android 7.0 giới thiệu nội dung BlockedNumberProvider nhà cung cấp lưu trữ danh sách các số điện thoại mà người dùng đã chỉ định không được có thể liên hệ với chúng qua thông tin liên lạc điện thoại (cuộc gọi, SMS, MMS). Hệ thống sẽ tuân thủ các số trong danh sách chặn bằng cách hạn chế cuộc gọi và tin nhắn từ các số đó. Android 7.0 hiện danh sách các số bị chặn và cho phép người dùng thêm và xoá số.

Ngoài ra, tính năng chặn số cho phép hệ thống và các ứng dụng có liên quan trên nền tảng hoạt động cùng nhau để giúp bảo vệ người dùng và đơn giản hoá của bạn. Trình quay số mặc định, ứng dụng nhắn tin mặc định, ứng dụng đặc quyền UICC, và các ứng dụng có cùng chữ ký với hệ thống đều có thể đọc trực tiếp từ và ghi vào danh sách bị chặn. Vì các số bị chặn được lưu trữ trên hệ thống, bất kể người dùng sử dụng ứng dụng quay số hay nhắn tin nào, các số vẫn giữ nguyên bị chặn. Cuối cùng, bạn có thể khôi phục danh sách số bị chặn trên mọi thiết bị mới. bất kể nhà sản xuất.

  • Người dùng sẽ được đảm bảo sử dụng được tính năng chặn ngay lập tức và sẽ không mất danh sách chặn khi chuyển ứng dụng hoặc mua điện thoại mới. Tất cả các ứng dụng có liên quan trên hệ thống có thể chia sẻ cùng một danh sách để cung cấp cho người dùng trải nghiệm đơn giản nhất.
  • Nhà phát triển ứng dụng không cần xây dựng cách riêng để quản lý danh sách chặn cũng như các cuộc gọi và tin nhắn đến. Họ chỉ cần sử dụng do nền tảng cung cấp.
  • Ứng dụng trình quay số / nhắn tin được người dùng chọn làm mặc định đọc và ghi cho trình cung cấp. Các ứng dụng khác có thể chạy tính năng quản lý danh sách chặn giao diện người dùng bằng cách sử dụng createManageBlockedNumbersIntent()
  • OEM có thể sử dụng tính năng do nền tảng cung cấp để triển khai tính năng chặn ngay khi mở hộp. OEM có thể yên tâm rằng khi người dùng chuyển từ nhà sản xuất thiết bị gốc khác thiết bị mà họ có trải nghiệm làm quen tốt hơn vì danh sách chặn sẽ cũng được chuyển đi.
  • Nếu nhà mạng có ứng dụng quay số hoặc ứng dụng nhắn tin riêng, họ có thể sử dụng lại tính năng của nền tảng để cho phép người dùng duy trì danh sách chặn. Họ có thể an tâm danh sách chặn của người dùng có thể ở lại cùng người dùng, ngay cả khi họ có thiết bị. Cuối cùng, tất cả các ứng dụng có đặc quyền của nhà mạng đều có thể đọc danh sách chặn, do đó nếu nhà mạng muốn cung cấp thêm một số tính năng chặn mạnh mẽ hơn cho người dùng dựa trên danh sách chặn, mà hiện có thể thực hiện với tính năng này.

Luồng dữ liệu

luồng dữ liệu số khối

Hình 1. Chặn luồng dữ liệu số điện thoại

Ví dụ và nguồn

Dưới đây là ví dụ về các cuộc gọi sử dụng tính năng chặn số mới:

Chạy trình quản lý số đã chặn khỏi ứng dụng

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

Truy vấn số điện thoại bị chặn

Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
         new String[]{BlockedNumbers.COLUMN_ID,
         BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
         BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

Đặt số bị chặn

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);

Xoá số điện thoại bị chặn

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
getContentResolver().delete(uri, null, null);

Triển khai

Sau đây là các nhiệm vụ cấp cao phải hoàn thành để sử dụng tính năng chặn số điện thoại:

  • OEM triển khai tính năng hạn chế cuộc gọi/tin nhắn trên thiết bị bằng cách sử dụng BlockedNumberProvider
  • Nếu nhà mạng có ứng dụng gọi điện hoặc nhắn tin, hãy triển khai cuộc gọi/tin nhắn hạn chế các tính năng bằng cách sử dụng BlockedNumberProvider
  • Trình quay số và ứng dụng nhắn tin của bên thứ ba sử dụng BlockedNumberProvider để sử dụng các tính năng chặn

Đề xuất cho OEM (Nhà sản xuất thiết bị gốc)

Nếu trước đây thiết bị chưa từng vận chuyển kèm theo bất kỳ cuộc gọi/tin nhắn nào khác các tính năng hạn chế, hãy sử dụng tính năng chặn số trong Nguồn mở Android Project (AOSP) trên tất cả các thiết bị như vậy. Bạn nên nhập một cách hợp lý điểm để chặn được hỗ trợ, chẳng hạn như chặn một số ngay từ cuộc gọi hoặc trong một chuỗi thư.

Nếu trước đây thiết bị đã được vận chuyển với các tính năng hạn chế cuộc gọi/tin nhắn, hãy điều chỉnh các tính năng đó để tất cả số điện thoại khớp nghiêm ngặt bị chặn được lưu trữ trong BlockedNumberProvider, và hành vi xung quanh nhà cung cấp đáp ứng các yêu cầu đối với tính năng này được nêu trong Tài liệu định nghĩa về khả năng tương thích của Android (CDD).

Bất kỳ tính năng nâng cao nào khác đều có thể được triển khai thông qua nhà cung cấp tuỳ chỉnh và giao diện người dùng tuỳ chỉnh / các nút điều khiển, miễn là đáp ứng các yêu cầu của CDD liên quan đến chặn số điện thoại khớp nghiêm ngặt. Bạn nên sử dụng các tính năng khác đó được gắn nhãn là tính năng "nâng cao" để tránh nhầm lẫn với các tính năng cơ bản tính năng chặn số.

API

Dưới đây là các API đang được sử dụng:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Vui lòng tham khảo BlockedNumberContract
    • API do BlockedNumberContract cung cấp
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Giao diện người dùng

Bạn có thể dùng giao diện người dùng blockedNumbersActivity.java được cung cấp trong AOSP (Dự án nguồn mở Android) làm của chúng tôi. Trình triển khai thiết bị cũng có thể triển khai phiên bản giao diện người dùng riêng, miễn là đáp ứng các yêu cầu liên quan của CDD.

Xin lưu ý rằng có thể cần đến ứng dụng sao lưu và khôi phục của đối tác trên máy tính triển khai khôi phục danh sách chặn bằng cách sử dụng BlockedNumberProvider. Hãy xem các hình ảnh bên dưới để biết các quảng cáo bị chặn số được cung cấp trong AOSP (Dự án nguồn mở Android).

giao diện người dùng của số khối

Hình 2. Giao diện người dùng của tính năng Chặn số điện thoại

Xác nhận kết quả

Người triển khai có thể đảm bảo phiên bản tính năng của họ hoạt động như dự kiến bằng chạy các bài kiểm thử CTS sau:

android.provider.cts.BlockedNumberContractTest
com.android.cts.numberblocking.hostside.NumberBlockingTest
android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected
android.telephony.cts.SmsManagerTest#testSmsBlocking

Bạn có thể thao tác với BlockedNumberProvider bằng các lệnh adb sau khi chạy $ adb root. Ví dụ:

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