เนื่องจากโทรศัพท์เป็นช่องทางการสื่อสารที่เปิดกว้างมาก ทุกคนสามารถโทรหรือส่งข้อความถึงหมายเลขใดก็ได้ทุกเมื่อ ผู้ใช้ Android จึงต้องสามารถบล็อกการโทรและข้อความที่ไม่ต้องการได้อย่างง่ายดาย
ก่อน Android 7.0 ผู้ใช้ Android ต้องอาศัยแอปที่ดาวน์โหลดมาเพื่อจำกัดการโทรและ SMS จากหมายเลขโทรศัพท์ที่รบกวน แอปจำนวนมากเหล่านั้นทำงานไม่เป็นไปตามที่ต้องการหรือให้ประสบการณ์การใช้งานที่ไม่ดีนักเนื่องจากไม่มี API ที่ถูกต้องสำหรับการบล็อกการโทรและข้อความ
ผู้ผลิตบางรายอาจจัดส่งโซลูชันการบล็อกของตนเองให้พร้อมใช้งาน แต่หากผู้ใช้เปลี่ยนอุปกรณ์ ผู้ใช้อาจสูญเสียรายการที่บล็อกไปทั้งหมดเนื่องจากขาดความสามารถในการทำงานร่วมกัน สุดท้ายนี้ แม้ว่าผู้ใช้จะใช้แอปโทรและโปรแกรมรับส่งข้อความที่มีฟังก์ชันการทำงานดังกล่าว แต่ผู้ใช้ก็อาจยังต้องดำเนินการบล็อกในแต่ละแอปเพื่อให้การบล็อกมีผลกับทั้งการโทรและการรับส่งข้อความ
ฟีเจอร์
เวอร์ชัน Android 7.0 เปิดตัวผู้ให้บริการเนื้อหา BlockedNumberProvider
ที่จัดเก็บรายการหมายเลขโทรศัพท์ที่ผู้ใช้ระบุไว้ว่าไม่ควรติดต่อผู้ใช้ผ่านการสื่อสารทางโทรศัพท์ (การโทร, SMS, MMS) ระบบจะบล็อกหมายเลขในรายการที่บล็อกโดยจำกัดการโทรและ SMS จากหมายเลขเหล่านั้น Android 7.0 จะแสดงรายการหมายเลขที่ถูกบล็อกและอนุญาตให้ผู้ใช้เพิ่มและนำหมายเลขออก
นอกจากนี้ ฟีเจอร์การบล็อกหมายเลขยังช่วยให้ระบบและแอปที่เกี่ยวข้องในแพลตฟอร์มทำงานร่วมกันเพื่อช่วยปกป้องผู้ใช้และลดความซับซ้อนของการใช้งาน แอปโทรศัพท์เริ่มต้น ไคลเอ็นต์การรับส่งข้อความเริ่มต้น แอปที่มีสิทธิ์ UICC และแอปที่มีลายเซ็นเดียวกับระบบจะอ่านและเขียนลงในรายการที่บล็อกได้โดยตรง เนื่องจากระบบจะจัดเก็บหมายเลขที่บล็อกไว้ หมายเลขดังกล่าวจะยังคงถูกบล็อกอยู่ไม่ว่าจะใช้แอปโทรหรือแอปรับส่งข้อความใดก็ตาม สุดท้าย คุณอาจกู้คืนรายการหมายเลขที่บล็อกในอุปกรณ์เครื่องใหม่ได้ ไม่ว่าผู้ผลิตจะรายใดก็ตาม
- ผู้ใช้จะได้รับฟีเจอร์การบล็อกที่ใช้งานได้ทันทีและจะไม่สูญเสียรายการที่บล็อกเมื่อเปลี่ยนแอปหรือซื้อโทรศัพท์เครื่องใหม่ แอปที่เกี่ยวข้องทั้งหมดในระบบสามารถแชร์รายการเดียวกันเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นที่สุด
- นักพัฒนาแอปไม่จําเป็นต้องพัฒนาวิธีของตนเองในการจัดการรายการที่บล็อก ตลอดจนสายเรียกเข้าและข้อความที่เข้ามา เพียงแค่ใช้ฟีเจอร์ที่แพลตฟอร์มมีให้
- แอปโทรศัพท์ / การรับส่งข้อความที่ผู้ใช้เลือกไว้เป็นค่าเริ่มต้นจะอ่านและเขียนไปยังผู้ให้บริการได้ แอปอื่นๆ สามารถเปิดอินเทอร์เฟซผู้ใช้สำหรับการจัดการรายการที่บล็อกได้โดยใช้
createManageBlockedNumbersIntent()
- OEM สามารถใช้ฟีเจอร์ที่แพลตฟอร์มมีให้เพื่อส่งฟีเจอร์การบล็อกได้ทันที OEM ต่างๆ วางใจได้ว่าเมื่อผู้ใช้เปลี่ยนจากอุปกรณ์ของ OEM รายอื่น ผู้ใช้จะได้รับประสบการณ์การเริ่มต้นใช้งานที่ดีขึ้นเนื่องจากระบบจะโอนรายการที่บล็อกด้วย
- หากผู้ให้บริการมีแอปเฮดเซ็ตหรือแอปรับส่งข้อความของตนเอง ผู้ให้บริการจะนําฟีเจอร์ของแพลตฟอร์มมาใช้ซ้ำเพื่อให้ผู้ใช้จัดการรายการที่บล็อกได้ ผู้ใช้สามารถมั่นใจได้ว่ารายการที่บล็อกจะยังคงอยู่กับผู้ใช้แม้ว่าผู้ใช้จะเปลี่ยนอุปกรณ์ใหม่ สุดท้าย แอปที่มีสิทธิ์ของผู้ให้บริการทุกแอปจะอ่านรายการที่บล็อกได้ ดังนั้นหากผู้ให้บริการต้องการบล็อกเพิ่มเติมที่มีประสิทธิภาพมากขึ้นสำหรับผู้ใช้ตามรายการที่บล็อก ฟีเจอร์นี้จะช่วยให้เป็นไปได้
โฟลว์ข้อมูล

รูปที่ 1 บล็อกการไหลของข้อมูลหมายเลขโทรศัพท์
ตัวอย่างและแหล่งที่มา
ตัวอย่างการโทรโดยใช้ฟีเจอร์ใหม่ในการบล็อกหมายเลขมีดังนี้
เปิดเครื่องมือจัดการหมายเลขที่บล็อกจากแอป
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
ค้นหาหมายเลขที่ถูกบล็อก
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
ใส่หมายเลขที่ถูกบล็อก
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
ลบหมายเลขที่บล็อก
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);
การใช้งาน
ต่อไปนี้เป็นงานระดับสูงที่ต้องทำเพื่อใช้ฟีเจอร์การบล็อกหมายเลข
- OEM ใช้ฟีเจอร์การจำกัดการโทร/ข้อความในอุปกรณ์โดยใช้
BlockedNumberProvider
- หากผู้ให้บริการมีแอปโทรศัพท์หรือแอปรับส่งข้อความ ให้ใช้ฟีเจอร์การจำกัดการโทร/การรับส่งข้อความโดยใช้
BlockedNumberProvider
- ผู้ให้บริการแอปโทรศัพท์และแอปรับส่งข้อความของบุคคลที่สามใช้
BlockedNumberProvider
สำหรับฟีเจอร์การบล็อก
คําแนะนําสําหรับ OEM
หากก่อนหน้านี้อุปกรณ์ไม่เคยมาพร้อมกับฟีเจอร์การจำกัดการโทร/ข้อความเพิ่มเติม ให้ใช้ฟีเจอร์การบล็อกหมายเลขในโครงการโอเพนซอร์ส Android (AOSP) ในอุปกรณ์ดังกล่าวทั้งหมด ขอแนะนำให้รองรับจุดแรกเข้าที่สมเหตุสมผลสำหรับการบล็อก เช่น การบล็อกหมายเลขจากบันทึกการโทรหรือภายในชุดข้อความ
หากก่อนหน้านี้อุปกรณ์มาพร้อมกับฟีเจอร์การจำกัดการโทร/ข้อความ ให้ปรับแต่งฟีเจอร์ดังกล่าวเพื่อให้หมายเลขโทรศัพท์ที่ตรงกันทั้งหมดที่ถูกบล็อกจัดเก็บไว้ใน BlockedNumberProvider,
และลักษณะการทํางานของผู้ให้บริการเป็นไปตามข้อกําหนดสําหรับฟีเจอร์นี้ที่ระบุไว้ในเอกสารข้อกําหนดความเข้ากันได้ของ Android (CDD)
คุณสามารถใช้ฟีเจอร์ขั้นสูงอื่นๆ ผ่านผู้ให้บริการที่กําหนดเองและ UI/การควบคุมที่กําหนดเอง ตราบใดที่เป็นไปตามข้อกําหนด CDD เกี่ยวกับการบล็อกหมายเลขโทรศัพท์ที่ตรงกันทั้งหมด เราขอแนะนำให้ติดป้ายกำกับฟีเจอร์อื่นๆ เหล่านั้นว่าเป็นฟีเจอร์ "ขั้นสูง" เพื่อไม่ให้สับสนกับฟีเจอร์การบล็อกหมายเลขพื้นฐาน
API
API ที่ใช้อยู่มีดังนี้
TelecomManager API
Intent createManageBlockedNumbersIntent()
Carrier Config
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
- โปรดดู
BlockedNumberContract
- API ที่
BlockedNumberContract
ให้บริการ boolean isBlocked(Context context, String phoneNumber)
int unblock(Context context, String phoneNumber)
boolean canCurrentUserBlockNumbers(Context context)
- API ที่
ส่วนติดต่อผู้ใช้
อินเทอร์เฟซผู้ใช้ BlockedNumbersActivity.java ที่มีให้ใน AOSP สามารถใช้ได้โดยไม่ต้องแก้ไข ผู้ติดตั้งใช้งานอุปกรณ์อาจใช้ UI เวอร์ชันของตนเองได้ ตราบใดที่เป็นไปตามข้อกำหนด CDD ที่เกี่ยวข้อง
โปรดทราบว่าคุณอาจต้องใช้แอปบน PC ของพาร์ทเนอร์สำหรับการสำรองและกู้คืนเพื่อดำเนินการกู้คืนรายการที่บล็อกโดยใช้BlockedNumberProvider
ดูอินเทอร์เฟซหมายเลขที่บล็อกซึ่งระบุไว้ใน AOSP ได้ที่รูปภาพด้านล่าง

รูปที่ 2 อินเทอร์เฟซผู้ใช้สำหรับบล็อกหมายเลขโทรศัพท์
การตรวจสอบความถูกต้อง
ผู้ใช้งานสามารถตรวจสอบว่าฟีเจอร์เวอร์ชันของตนทํางานได้ตามที่ต้องการโดยทําการทดสอบ CTS ต่อไปนี้
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
คุณสามารถดําเนินการกับ BlockedNumberProvider
โดยใช้คําสั่ง adb
หลังจากเรียกใช้ $ adb root
เช่น
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