การกำหนดค่าผู้ให้บริการ

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 เป็นแบบสาธารณะและกำหนดไว้เป็นอย่างดี

วิธีการทำงาน

โหลดการกำหนดค่า

การกำหนดค่าผู้ให้บริการที่ฟีเจอร์นี้ระบุไว้คือชุดคู่คีย์-ค่า ซึ่งเปลี่ยนลักษณะการทำงานที่หลากหลายเกี่ยวกับโทรศัพท์ในแพลตฟอร์ม

ชุดของค่าสำหรับอุปกรณ์หนึ่งๆ จะกำหนดโดยการค้นหา คอมโพเนนต์ต่อไปนี้ตามลำดับ

  1. แอปของผู้ให้บริการ (ตัวเลือกนี้เป็นตัวเลือกที่แนะนำ แต่เป็นวิธีที่แนะนำ ตำแหน่งนั้นสำหรับการกำหนดค่าเพิ่มเติมนอกเหนือจากที่มีอยู่ใน Android Open โปรเจ็กต์ต้นทาง (AOSP))
  2. แอปการกำหนดค่าแพลตฟอร์มที่มาพร้อมกับอิมเมจระบบ
  3. ค่าเริ่มต้น ซึ่งฮาร์ดโค้ดไว้ในเฟรมเวิร์ก (เทียบเท่ากับลักษณะการทำงานก่อนหน้า ถึง 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

  1. ลบล้าง onLoadConfig เพื่อแสดงค่าที่คุณต้องการ อุปทานตามออบเจ็กต์ service.carrier.CarrierIdentifier ผ่าน
  2. เพิ่มตรรกะเพื่อเรียก 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