Android 6.0 ขึ้นไปรวมถึงความสามารถสำหรับ เพื่อระบุการกำหนดค่าเฉพาะผู้ให้บริการของแพลตฟอร์ม ช่วงเวลานี้ ฟังก์ชันตามสิทธิ์ของผู้ให้บริการ UICC ที่เปิดตัวใน Android 5.1 (Lollipop MR1) ช่วยให้ผู้ให้บริการ ที่จะย้ายออกจากการวางซ้อนการกำหนดค่าแบบคงที่และให้ ผู้ให้บริการ และ OEM สามารถ กำหนดค่าผู้ให้บริการแบบไดนามิกให้กับ แพลตฟอร์มผ่านอินเทอร์เฟซที่กำหนด
แอปของผู้ให้บริการที่มีการรับรองถูกต้องอาจโหลดไว้ล่วงหน้าในอิมเมจระบบ ติดตั้งโดยอัตโนมัติ หรือติดตั้งด้วยตนเองผ่าน App Store แอป จะค้นหาโดยแพลตฟอร์มเพื่อระบุการกำหนดค่าสำหรับการตั้งค่า ซึ่งรวมถึง
- เครือข่ายแบบโรมมิ่ง/ไม่โรมมิ่ง
- ข้อความเสียงพร้อมภาพ
- การตั้งค่าเครือข่าย SMS/MMS
- การกำหนดค่า VoLTE/IMS
การกำหนดว่าค่าใดจะส่งคืนค่าทั้งหมดจะขึ้นอยู่กับแอปของผู้ให้บริการ และสามารถเป็นแบบไดนามิกตามข้อมูลโดยละเอียดที่ส่งไปยังแอปผ่าน ที่มีการจัดการครบวงจรได้เลย
ประโยชน์หลักๆ ของวิธีการนี้คือ
- การกำหนดค่าแบบไดนามิก - การสนับสนุนแนวคิด เช่น การกําหนดค่าที่ได้มาที่ไม่ใช่ MCCMNC เช่น ผู้ให้บริการเครือข่ายเสมือน (MVNO) บนอุปกรณ์เคลื่อนที่ หรือลูกค้าเลือกรับบริการเพิ่มเติม
- การรองรับอุปกรณ์ที่ขายผ่านทุกช่องทาง - ตัวอย่างเช่น โทรศัพท์สามารถกำหนดค่าได้โดยอัตโนมัติ ด้วยด้านขวา โดยดาวน์โหลดแอปจาก App Store
- ความปลอดภัย - สิทธิ์ในการใช้การกำหนดค่านี้คือ สำหรับแอปที่ลงนามโดยผู้ให้บริการเท่านั้น
- API ที่กำหนด - ก่อนหน้านี้จัดเก็บการกำหนดค่านี้ไว้ ส่วนใหญ่เป็นการวางซ้อน XML ภายในภายในกรอบการทำงาน ไม่ใช่ผ่านสาธารณะ API API การกำหนดค่าผู้ให้บริการใน Android 6.0 เป็นแบบสาธารณะและกำหนดไว้เป็นอย่างดี
วิธีการทำงาน
โหลดการกำหนดค่า
การกำหนดค่าผู้ให้บริการที่ฟีเจอร์นี้ระบุไว้คือชุดคู่คีย์-ค่า ซึ่งเปลี่ยนลักษณะการทำงานที่หลากหลายเกี่ยวกับโทรศัพท์ในแพลตฟอร์ม
ชุดของค่าสำหรับอุปกรณ์หนึ่งๆ จะกำหนดโดยการค้นหา คอมโพเนนต์ต่อไปนี้ตามลำดับ
- แอปของผู้ให้บริการ (ตัวเลือกนี้เป็นตัวเลือกที่แนะนำ แต่เป็นวิธีที่แนะนำ ตำแหน่งนั้นสำหรับการกำหนดค่าเพิ่มเติมนอกเหนือจากที่มีอยู่ใน Android Open โปรเจ็กต์ต้นทาง (AOSP))
- แอปการกำหนดค่าแพลตฟอร์มที่มาพร้อมกับอิมเมจระบบ
- ค่าเริ่มต้น ซึ่งฮาร์ดโค้ดไว้ในเฟรมเวิร์ก (เทียบเท่ากับลักษณะการทำงานก่อนหน้า ถึง Android 6.0)
แอปการกำหนดค่าแพลตฟอร์ม
แอปการกำหนดค่าแพลตฟอร์มทั่วไปจะมาพร้อมกับอิมเมจระบบ แอปนี้สามารถให้
สำหรับตัวแปรที่แอปของผู้ให้บริการทั่วไปไม่มี การกำหนดค่าแพลตฟอร์ม
ค้นหาแอปได้ (ใน Android 6.0) ใน: packages/apps/CarrierConfig
วัตถุประสงค์ของแอปนี้คือให้กำหนดค่าบางอย่างต่อเครือข่ายเมื่อผู้ให้บริการ แอปไม่ได้ติดตั้ง และผู้ให้บริการ/OEM ควรทำการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น ในรูปภาพของตนเอง แต่ผู้ให้บริการควรจัดเตรียมแอปของผู้ให้บริการแยกต่างหาก การปรับแต่งผู้ให้บริการ ทำให้เผยแพร่การอัปเดตผ่านช่องทางต่างๆ ได้ เช่น App Store
วิธีให้สิทธิ์แอปของผู้ให้บริการ
แอปของผู้ให้บริการที่เป็นปัญหาต้องลงชื่อด้วยใบรับรองเดียวกันกับที่พบใน ซิมการ์ดตามที่ระบุไว้ในสิทธิ์ของผู้ให้บริการ UICC
ข้อมูลที่จะส่งไปยังแอปของผู้ให้บริการ
แอปของผู้ให้บริการจะได้รับค่าต่อไปนี้ ซึ่งทำให้แอปสร้าง ตัดสินใจแบบไดนามิกเกี่ยวกับค่าที่จะส่งคืน:
- MCC
- MNC
- SPN
- IMSI
- รหัส 1
- รหัส 2
- รหัสผู้ให้บริการ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการผสานรวมรหัสผู้ให้บริการได้ที่ การผสานรวมรหัสผู้ให้บริการกับ CarrierConfig
เมื่อโหลดการกำหนดค่าผู้ให้บริการ
การสร้างรายการคู่คีย์-ค่าจะเกิดขึ้น
- เมื่อโหลดซิมแล้ว (รีบูตหรือการสลับฮอตซิม)
- เมื่อแอปของผู้ให้บริการทริกเกอร์การโหลดซ้ำด้วยตนเอง
- เมื่อแอปของผู้ให้บริการได้รับการอัปเดต
โปรดดู
android.service.carrier.CarrierService#onLoadConfig()
ข้อมูลอ้างอิงสำหรับรายละเอียดเพิ่มเติม
ใช้การกำหนดค่า
เมื่อสร้างการกำหนดค่า ระบบจะใช้ค่าที่อยู่ภายใน เพื่อใช้ตั้งค่าต่างๆ สำหรับการกำหนดค่าระบบ ได้แก่
- การตั้งค่าโทรศัพท์ของเฟรมเวิร์กภายใน
- ค่าของการกำหนดค่าที่ส่งคืนโดย SDK เช่น ใน SmsManager
- การตั้งค่าแอป เช่น ค่าการเชื่อมต่อ VVM ในโทรศัพท์
คีย์การกำหนดค่า
รายการคีย์ได้รับการกำหนดเป็นส่วนหนึ่งของ SDK สาธารณะใน android.telephony.CarrierConfigManager
และไม่สามารถเปลี่ยนภายใน API ระดับเดียวกัน ดูข้อมูลสรุปของคีย์ในตารางด้านล่าง
สร้างแอป
สร้างแอป
แอปของคุณต้องกำหนดเป้าหมายระดับ API ของ Android 6.0 (23)
ประกาศคลาสที่ถูกลบล้าง android.service.carrier.CarrierService
- ลบล้าง
onLoadConfig
เพื่อแสดงค่าที่คุณต้องการ อุปทานตามออบเจ็กต์service.carrier.CarrierIdentifier
ผ่าน - เพิ่มตรรกะเพื่อเรียก
notifyConfigChangedForSubId
ในสถานการณ์ ซึ่งการกำหนดค่าของผู้ให้บริการอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป (ตัวอย่างเช่น เมื่อ ผู้ใช้เพิ่มบริการเพิ่มเติมในบัญชี)
ตัวอย่างด้านล่าง
public class SampleCarrierConfigService extends CarrierService { private static final String TAG = "SampleCarrierConfigService"; public SampleCarrierConfigService() { Log.d(TAG, "Service created"); } @Override public PersistableBundle onLoadConfig(CarrierIdentifier id) { Log.d(TAG, "Config being fetched"); PersistableBundle config = new PersistableBundle(); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false); config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6); // Check CarrierIdentifier and add more config if needed… return config; } }
ดูรายละเอียดเพิ่มเติมได้ที่
android.service.carrier.CarrierService
ข้อมูลอ้างอิง
ตั้งชื่อคลาสในไฟล์ Manifest
ตัวอย่างด้านล่าง
<service android:name=".SampleCarrierConfigService" android:label="@string/service_name" android:permission="android.permission.BIND_CARRIER_SERVICES"> <intent-filter> <action android:name="android.service.carrier.CarrierService"/></intent-filter> </service>
ลงนามแอปด้วย ใบรับรองในซิม
โปรดดูสิทธิ์ของผู้ให้บริการ UICC สำหรับ
เพิ่ม APN ด้วยแอปของผู้ให้บริการ
วิธีเพิ่ม APN จากแอปของผู้ให้บริการแบบเป็นโปรแกรม (เช่น ระหว่างใช้งานซิม
การเปิดใช้งาน) ใช้
ContentResolver
API สำหรับเพิ่มรายการ APN ไปยังผู้ให้บริการเนื้อหา
ที่ระบุโดย URI
android.provider.Telephony.Carriers.CONTENT_URI
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างตารางสำหรับ URI เนื้อหา โปรดดู
Telephony.Carriers
สำหรับข้อมูลเพิ่มเติม โปรดดู APN และ CarrierConfig
ทดสอบแอป
หลังจากสร้างแอปการกำหนดค่าแล้ว คุณจะทดสอบโค้ดได้ กับ
- ซิมที่มีลายเซ็นใบรับรองที่ถูกต้อง
- อุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป เช่น อุปกรณ์ Android