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

Android 6.0 และสูงกว่านั้นมีความสามารถสำหรับแอปที่ได้รับสิทธิพิเศษเพื่อมอบการกำหนดค่าเฉพาะของผู้ให้บริการให้กับแพลตฟอร์ม ฟังก์ชันการทำงานนี้อิงตาม สิทธิ์ของผู้ให้บริการ UICC ที่เปิดตัวใน Android 5.1 (Lollipop MR1) ช่วยให้การกำหนดค่าของผู้ให้บริการสามารถย้ายออกจากการซ้อนทับการกำหนดค่าแบบคงที่ และช่วยให้ผู้ให้บริการและ OEM สามารถจัดเตรียมการกำหนดค่าของผู้ให้บริการไปยังแพลตฟอร์มแบบไดนามิกผ่านอินเทอร์เฟซที่กำหนดไว้

แอพผู้ให้บริการที่ลงนามอย่างถูกต้องสามารถโหลดล่วงหน้าในอิมเมจระบบ ติดตั้งโดยอัตโนมัติ หรือติดตั้งด้วยตนเองผ่าน App Store แพลตฟอร์มสอบถามแอปเพื่อให้การกำหนดค่าสำหรับการตั้งค่า ได้แก่ :

  • เครือข่ายโรมมิ่ง/ไม่โรมมิ่ง
  • ข้อความเสียงพร้อมภาพ
  • การตั้งค่าเครือข่าย SMS/MMS
  • การกำหนดค่า VoLTE/IMS

การตัดสินใจว่าจะให้คืนค่าใดนั้นขึ้นอยู่กับแอปของผู้ให้บริการทั้งหมดและอาจเปลี่ยนแปลงได้ขึ้นอยู่กับข้อมูลโดยละเอียดที่ส่งไปยังแอปผ่านแพลตฟอร์ม

ประโยชน์ที่สำคัญของแนวทางนี้คือ:

  • การกำหนดค่าแบบไดนามิก - รองรับแนวคิด เช่น การกำหนดค่าที่ได้รับที่ไม่ใช่ MCCMNC เช่น ผู้ให้บริการเครือข่ายเสมือนมือถือ (MVNO) หรือลูกค้าเลือกรับบริการพิเศษ
  • รองรับอุปกรณ์ที่จำหน่ายผ่านช่องทางใดก็ได้ - ตัวอย่างเช่น โทรศัพท์ในตลาดเปิดสามารถกำหนดค่าได้โดยอัตโนมัติด้วยการตั้งค่าที่เหมาะสมโดยการดาวน์โหลดแอปจาก App Store
  • ความปลอดภัย - สิทธิ์ในการกำหนดค่านี้จะมอบให้กับแอปที่ลงนามโดยผู้ให้บริการเท่านั้น
  • API ที่กำหนด - ก่อนหน้านี้การกำหนดค่านี้ส่วนใหญ่จัดเก็บไว้ในการซ้อนทับ XML ภายในภายในกรอบงาน ไม่ใช่ผ่าน API สาธารณะ Carrier config API ใน Android 6.0 เป็นแบบสาธารณะและมีการกำหนดไว้อย่างดี

มันทำงานอย่างไร

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

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

ชุดของค่าสำหรับอุปกรณ์เฉพาะถูกกำหนดโดยการสืบค้นส่วนประกอบต่อไปนี้ตามลำดับ:

  1. แอปผู้ให้บริการ (นี่เป็นทางเลือก แต่เป็นตำแหน่งที่แนะนำสำหรับการกำหนดค่าเพิ่มเติมนอกเหนือจากที่มีอยู่ใน Android Open Source Project (AOSP))
  2. แอปกำหนดค่าแพลตฟอร์มที่มาพร้อมกับอิมเมจระบบ
  3. ค่าเริ่มต้นฮาร์ดโค้ดลงในกรอบงาน (เทียบเท่ากับพฤติกรรมก่อน Android 6.0)

แอปกำหนดค่าแพลตฟอร์ม

แอปกำหนดค่าแพลตฟอร์มทั่วไปจะมาพร้อมกับอิมเมจระบบ แอปนี้สามารถระบุค่าสำหรับตัวแปรใดๆ ที่แอปผู้ให้บริการทั่วไปไม่มีได้ แอปกำหนดค่าแพลตฟอร์มสามารถพบได้ (ใน Android 6.0) ใน: packages/apps/CarrierConfig

จุดประสงค์ของแอปนี้คือเพื่อให้การกำหนดค่าตามเครือข่ายบางอย่างเมื่อไม่ได้ติดตั้งแอปของผู้ให้บริการ และผู้ให้บริการ/OEM ควรทำการเปลี่ยนแปลงเพียงเล็กน้อยในรูปภาพของตนเอง ผู้ให้บริการควรจัดเตรียมแอปผู้ให้บริการแยกต่างหากสำหรับการปรับแต่งของผู้ให้บริการ เพื่อให้สามารถเผยแพร่การอัปเดตผ่านช่องทางต่างๆ เช่น App Store

วิธีการให้สิทธิ์แก่แอปของผู้ให้บริการ

แอปของผู้ให้บริการที่เป็นปัญหาจะต้องลงนามด้วยใบรับรองเดียวกันกับที่พบในซิมการ์ด ตามที่บันทึกไว้ใน สิทธิ์ของผู้ให้บริการ UICC

ข้อมูลใดบ้างที่ส่งผ่านไปยังแอปของผู้ให้บริการ

แอปผู้ให้บริการมาพร้อมกับค่าต่อไปนี้ ทำให้สามารถตัดสินใจแบบไดนามิกว่าจะส่งคืนค่าใด:

  • มช
  • บรรษัทข้ามชาติ
  • เอสพีเอ็น
  • ไอเอ็มซี
  • GID1
  • GID2
  • รหัสผู้ให้บริการ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรวม ID ผู้ให้บริการ โปรดดู การรวม ID ผู้ให้บริการกับ CarrierConfig

เมื่อโหลดการกำหนดค่าของผู้ให้บริการเกิดขึ้น

การสร้างรายการคู่ค่าคีย์เกิดขึ้น:

  • เมื่อโหลด SIM แล้ว (บูตหรือ SIM hot swap)
  • เมื่อแอปของผู้ให้บริการทริกเกอร์การโหลดซ้ำด้วยตนเอง
  • เมื่อแอปผู้ให้บริการได้รับการอัพเดต

ดูข้อมูลอ้างอิง android.service.carrier.CarrierService#onLoadConfig() สำหรับรายละเอียดเพิ่มเติม

การใช้การกำหนดค่า

เมื่อสร้างการกำหนดค่า ค่าที่อยู่ภายในจะถูกใช้เพื่อตั้งค่าต่างๆ ของการกำหนดค่าระบบ รวมถึง:

  • การตั้งค่าระบบโทรศัพท์ภายในกรอบงาน
  • ค่าการกำหนดค่าที่ส่งคืน SDK เช่นใน SmsManager
  • การตั้งค่าแอป เช่น ค่าการเชื่อมต่อ VVM ใน Dialer

คีย์การกำหนดค่า

รายการคีย์ถูกกำหนดให้เป็นส่วนหนึ่งของ SDK สาธารณะใน android.telephony.CarrierConfigManager และไม่สามารถเปลี่ยนแปลงภายในระดับ API เดียวกันได้ ดูตารางด้านล่างเพื่อดูข้อมูลสรุปของปุ่มต่างๆ

การสร้างแอป

การสร้างแอป

แอปของคุณต้องกำหนดเป้าหมายระดับ Android 6.0 API (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

การตั้งชื่อคลาสในรายการ

ตัวอย่างอยู่ด้านล่าง:

<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 โดยทางโปรแกรมจากแอปของผู้ให้บริการ (เช่น ระหว่างการเปิดใช้งาน SIM) ให้ใช้ ContentResolver API เพื่อเพิ่มรายการ APN ไปยังผู้ให้บริการเนื้อหาที่ระบุโดย URI android.provider.Telephony.Carriers.CONTENT_URI สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างตารางสำหรับ URI เนื้อหา โปรดดูที่ Telephony.Carriers

สำหรับข้อมูลเพิ่มเติม โปรดดู APN และ CarrierConfig

กำลังทดสอบแอป

เมื่อคุณสร้างแอปการกำหนดค่าแล้ว คุณสามารถทดสอบโค้ดของคุณด้วย:

  • ซิมที่มีลายเซ็นใบรับรองที่ถูกต้อง
  • อุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป เช่น อุปกรณ์ Android