การตรวจจับโซนเวลาของสถานที่

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

การตรวจจับโซนเวลาของสถานที่เป็นกลไกทางเลือกในการ ตรวจจับโซนเวลาของโทรศัพท์ เนื่องจากคุณลักษณะนี้ไม่จำเป็นต้องใช้ระบบโทรศัพท์ คุณลักษณะนี้จึงสามารถได้รับการสนับสนุนบนอุปกรณ์ที่มีรูปแบบต่างๆ นอกเหนือจากอุปกรณ์ระบบโทรศัพท์เคลื่อนที่

คุณลักษณะการตรวจจับโซนเวลาของสถานที่ประกอบด้วยส่วนประกอบต่อไปนี้ในแพลตฟอร์ม AOSP:

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

  • ระบบปลั๊กอินสำหรับส่วนประกอบที่ดำเนินการตรวจจับตำแหน่งและการทำแผนที่โซนเวลา ปลั๊กอินเรียกว่า Location Time Zone Provider (LTZP) และอาจมีได้สูงสุดสองตัวบนอุปกรณ์ แพลตฟอร์มดังกล่าวจัดเตรียม API ระบบที่ต้องใช้ในการใช้งาน LTZP

  • การใช้งาน LTZP อ้างอิง

  • เครื่องมือโฮสต์เพื่อสร้างชุดข้อมูลอ้างอิงจาก ข้อมูล OpenStreetMap ที่สามารถใช้กับการใช้งานอ้างอิง

ความเป็นส่วนตัวของผู้ใช้

การตรวจจับโซนเวลาของสถานที่มีคุณสมบัติความเป็นส่วนตัวของผู้ใช้ดังต่อไปนี้:

  • เมื่อมีการสลับเพื่อเลือกอัลกอริทึมตำแหน่ง ผู้ใช้สามารถปิดอัลกอริทึมตำแหน่งได้ตลอดเวลา

  • คำแนะนำเขตเวลาที่มาจากสถานที่จะไม่แชร์ระหว่างผู้ใช้บนอุปกรณ์

  • ผู้ใช้สามารถควบคุมการตรวจจับตำแหน่งสำหรับการตรวจจับโซนเวลาได้อย่างชัดเจนผ่านหน้าจอการตั้ง ค่าวันที่และเวลา ผู้ใช้ไม่จำเป็นต้องให้สิทธิ์อย่างชัดเจนผ่านกล่องโต้ตอบสิทธิ์

  • ข้อมูลตำแหน่งของอุปกรณ์จะไม่ถูกส่งไปยังบริการแพลตฟอร์ม Android สิ่งต่อไปนี้เกิดขึ้นแทน:

    • บริการตรวจจับเขตเวลาจะถูกส่งโดย LTZP เท่านั้น ไม่ใช่ตำแหน่งของอุปกรณ์ นี่คือ API ขั้นต่ำที่จำเป็นในการรองรับการตรวจจับเขตเวลาของตำแหน่ง
    • การดำเนินการของ LTZP แต่ละรายการนั้นปล่อยให้ผู้ประกอบระบบเป็นผู้ตัดสินใจ การใช้งาน LTZP สามารถใช้ข้อมูลแผนที่เขตเวลาที่เก็บไว้ในอุปกรณ์ Android ทั้งหมด ใช้ประโยชน์จากเซิร์ฟเวอร์ หรือใช้แนวทางแบบไฮบริด

ลักษณะการทำงาน

บริการ time_zone_detector กำหนดเวลาที่จะเปลี่ยนโซนเวลาปัจจุบันของอุปกรณ์ตามคำแนะนำที่ได้รับจาก อัลกอริธึม การตรวจจับ

บริการ location_time_zone_manager มีหน้าที่สร้างคำแนะนำสำหรับอัลกอริทึมตำแหน่งของ time_zone_detector บริการ location_time_zone_manager ทำงานในกระบวนการเซิร์ฟเวอร์ระบบ

บริการ location_time_zone_manager ไม่มีตรรกะการตรวจจับโซนเวลา มีหน้าที่รับผิดชอบในการจัดการวงจรการใช้งานของปลั๊กอินหนึ่งหรือสองตัวที่เรียกว่า Location Time Zone Providers (LTZP)

เมื่อไม่จำเป็นต้องตรวจหาโซนเวลาของตำแหน่ง LTZP จะไม่เริ่มทำงาน ซึ่งหมายความว่าระบบตรวจจับโซนเวลาของตำแหน่งจะไม่ขอให้ LTZP ติดตามตำแหน่งของอุปกรณ์ เว้นแต่จะจำเป็นอย่างชัดเจน สาเหตุบางประการสำหรับลักษณะการทำงานนี้มีดังต่อไปนี้:

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

นอกจากนี้ บริการ location_time_zone_manager ยังให้คำแนะนำที่ไม่แน่นอน (หากจำเป็น) เมื่อผู้ใช้ปัจจุบันเปลี่ยนแปลงเพื่อหลีกเลี่ยงการแชร์ข้อมูลตำแหน่งระหว่างผู้ใช้

จากตัวเลือกเหล่านี้ โดยปกติจะใช้เวลาไม่กี่วินาทีหลังจากเปลี่ยนอัลกอริทึมปัจจุบันเป็นตำแหน่ง หรือหลังจากเปลี่ยนผู้ใช้ปัจจุบัน ก่อนที่จะตรวจพบเขตเวลา นอกจากนี้ยังขึ้นอยู่กับการใช้งาน LTZP ที่ใช้งานอยู่ด้วย

การใช้งานการตรวจจับโซนเวลาของตำแหน่ง AOSP อนุญาตให้มี LTZP ได้สูงสุดสองตัว ซึ่งเป็น LTZP หลักและรองตามที่กำหนดไว้ที่นี่:

LTZP หลัก
ทำงานตลอดเวลาเมื่อผู้ใช้อนุญาตให้คุณลักษณะการตรวจหาเขตเวลาของสถานที่ทำงาน
LTZP รอง
รันหาก LTZP หลักรายงานว่าเขตเวลา ไม่แน่นอน รายงานความล้มเหลวถาวร หรือหมดเวลาระหว่างการกำหนดค่าเริ่มต้น หยุดหาก LTZP หลักส่งข้อเสนอแนะ บางอย่าง

ดังแสดงในรูปที่ 1 เซอร์วิส time_zone_detector ได้รับการแนะนำโซนเวลาจากอัลกอริธึมระบบโทรศัพท์หรือตำแหน่ง อัลกอริธึมตำแหน่งได้รับคำแนะนำจาก LTZP หลักหรือรอง

การไหลของข้อมูลการตรวจจับโซนเวลาของสถานที่

รูปที่ 1 โฟลว์ข้อมูลการตรวจจับโซนเวลาของตำแหน่ง

ข้อกำหนดการกำหนดค่าอุปกรณ์

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

การกำหนดค่าอุปกรณ์

ส่วนนี้จะอธิบายวิธีที่ผู้ผลิตอุปกรณ์สามารถกำหนดค่าอุปกรณ์ให้รองรับการตรวจจับโซนเวลาของตำแหน่งได้

การกำหนดค่า AOSP พื้นฐานอยู่ที่ frameworks/base/core/res/res/values/config.xml :

คีย์การกำหนดค่า ค่า AOSP คำอธิบาย
config_enableGeolocationTimeZoneDetection true นี่คือการควบคุมหลักสำหรับฟีเจอร์การตรวจหาโซนเวลาของสถานที่

คุณลักษณะนี้ได้รับการสนับสนุนโดยค่าเริ่มต้นใน AOSP ต้องเปิดใช้งานหรือกำหนดค่า LTZP อย่างน้อยหนึ่งรายการเพื่อให้คุณลักษณะนี้พร้อมใช้งานสำหรับผู้ใช้

การตั้งค่าเป็นเท็จจะปิดใช้งานคุณลักษณะทั้งหมดเพื่อประหยัดหน่วยความจำเพียงเล็กน้อย
config_enablePrimaryLocationTimeZoneProvider false สิ่งนี้จะเปิดใช้งาน LTZP หลัก
config_primaryLocationTimeZoneProviderPackageName ตั้งค่านี้เป็นชื่อแพ็คเกจของแอปที่สามารถพบบริการของผู้ให้บริการหลักได้
config_enableSecondaryLocationTimeZoneProvider false สิ่งนี้จะเปิดใช้งาน LTZP รอง
config_secondaryLocationTimeZoneProviderPackageName ตั้งค่านี้เป็นชื่อแพ็คเกจของแอปที่สามารถพบบริการของผู้ให้บริการรองได้

ตามค่าเริ่มต้น การกำหนดค่า AOSP จะมีคีย์ config_enableGeolocationTimeZoneDetection ตั้งค่าเป็น true ซึ่งจะทำให้สามารถรองรับคุณลักษณะการตรวจจับโซนเวลาของตำแหน่งได้ ผู้ใช้จะไม่เห็นคุณลักษณะนี้ในตอนแรกเนื่องจาก AOSP ไม่มีการกำหนดค่า LTZP ตามค่าเริ่มต้น อย่างไรก็ตาม เมื่อใช้การกำหนดค่าเริ่มต้นนี้ ผู้ผลิตอุปกรณ์สามารถเปิดใช้งานและจำลอง LTZP จากบรรทัดคำสั่งสำหรับการทดสอบได้ (สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การดีบักและการทดสอบ )

API สถานะ LTZP

ใน Android 14 LTZP API รองรับข้อมูลสถานะการรายงาน LTZP ซึ่งช่วยให้ LTZP สามารถรายงานปัญหาที่แพลตฟอร์มอาจไม่สามารถตรวจพบได้ด้วยตนเอง เนื่องจากส่วนประกอบการตรวจจับโซนเวลาของแพลตฟอร์มไม่เกี่ยวข้องโดยตรงกับการตรวจจับตำแหน่งหรือโซนเวลาในอัลกอริทึมตำแหน่ง

ความสามารถในการรายงานว่าพฤติกรรมของ LTZP ลดลงตามสภาพแวดล้อมของอุปกรณ์จะมีประโยชน์เมื่อรองรับ โหมดสำรองระบบโทรศัพท์ ตัวอย่างเช่น หาก LTZP บุคคลที่สามซึ่งอาศัยการตั้งค่าแบบกำหนดเองหรือการอนุญาตสำหรับการตรวจจับตำแหน่งในการทำงานกำลังทำงานในโหมดลดระดับหรือปิดใช้งานโดยการตั้งค่าอุปกรณ์ปัจจุบัน LTZP ก็สามารถรายงานข้อมูลสถานะนี้ไปยังส่วนประกอบแพลตฟอร์มภายใน เช่น แอปการตั้งค่า ผ่านวิธี reportSuggestion แอพการตั้งค่าสามารถแจ้งเตือนผู้ใช้ผ่านสตริงที่ปรับแต่งได้หรือการปรับแต่งว่ามีการตั้งค่าที่ต้องเปลี่ยนเพื่อให้อัลกอริธึมตำแหน่งทำงานได้ดีหรือเลย

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสถานะที่ LTZP สามารถรายงานได้ โปรดดูที่ TimeZoneProviderStatus

การกำหนดค่าและการปรับใช้ผู้ให้บริการโซนเวลาสถานที่

เมื่อกำหนดค่า LTZP ให้อ่านคำแนะนำในซอร์สโค้ดสำหรับ frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java ความคิดเห็น Javadoc ให้รายละเอียดเกี่ยวกับบริการ สิทธิ์ที่จำเป็น และการกำหนดค่าอื่นๆ

ในการกำหนดค่าผู้ให้บริการโซนเวลาของตำแหน่ง ผู้ผลิตอุปกรณ์จะต้องเลือกกระบวนการของแอปเพื่อโฮสต์บริการของ LTZP การมีกระบวนการเฉพาะสำหรับ LTZP ถือเป็นค่าใช้จ่ายที่สูง ตามหลักการแล้ว กระบวนการแอปที่เลือกนั้นเป็นกระบวนการที่ทำงานอยู่ตลอดเวลา เช่น เซิร์ฟเวอร์ระบบ

บนอุปกรณ์ที่มี ส่วนประกอบระบบโมดูลาร์ (โมดูล) ให้พิจารณาปฏิสัมพันธ์ระหว่างข้อมูลทางภูมิศาสตร์ที่ใช้โดย LTZP และกฎเขตเวลา (tzdb) ที่ดำเนินการใน โมดูลข้อมูลโซนเวลา ( com.android.tzdata ) การอัปเดตรายการหนึ่งโดยไม่มีการอัปเดตรายการอื่นมีแนวโน้มที่จะทำให้เกิดปัญหาการบิดเบือนเวอร์ชัน สำหรับข้อมูลเพิ่มเติม โปรดดู ข้อควรพิจารณาในการนำคุณลักษณะไปใช้

AOSP อ้างอิง LTZP

AOSP มีการใช้งาน LTZP อ้างอิงภายใต้ packages/modules/GeoTZ การใช้งานอ้างอิงนี้ใช้ AOSP API เพื่อระบุตำแหน่งของอุปกรณ์ และใช้ไฟล์ข้อมูลในอุปกรณ์เพื่อจับคู่ตำแหน่งกับชุดรหัสโซนเวลา

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

แก้ไขข้อบกพร่องและทดสอบ

ส่วนต่อไปนี้จะอธิบายคำสั่งเชลล์สำหรับการดีบักและทดสอบคุณสมบัติการตรวจจับโซนเวลาของตำแหน่ง

โต้ตอบกับบริการ location_time_zone_manager

เมื่ออุปกรณ์ที่ใช้ Android 12 ขึ้นไปรองรับอัลกอริทึมตำแหน่ง Android จะสร้างบริการ location_time_zone_manager ทันทีในเวลาบูต

หากต้องการดัมพ์สถานะปัจจุบันของ location_time_zone_manager ให้ใช้:

adb shell cmd location_time_zone_manager dump

หากต้องการดูชุดตัวเลือกบรรทัดคำสั่งมากมายเพื่อช่วยในการทดสอบ ให้ใช้:

adb shell cmd location_time_zone_manager help

ผลลัพธ์วิธีใช้ยังอธิบายคุณสมบัติของบริการ device_config ที่สามารถใช้เพื่อส่งผลต่อพฤติกรรมของ time_zone_detector สำหรับการทดสอบหรือในการใช้งานจริง สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การกำหนดค่าอุปกรณ์โดยใช้เซอร์วิส device_config

การใช้งาน LTZP ยังสามารถให้การสนับสนุนการดีบักหรือการทดสอบของตนเองได้ ตัวอย่างเช่น คุณสามารถใช้คำสั่งต่อไปนี้เพื่อดีบัก LTZP อ้างอิง AOSP เมื่อมีการลงทะเบียนในกระบวนการเซิร์ฟเวอร์ระบบ

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService