تشخیص خودکار زمان پیشنهادات زمانی را از منابع مختلف دریافت میکند، بهترین گزینه را انتخاب میکند و سپس ساعت سیستم را در اندروید مطابقت میدهد. نسخههای قبلی اندروید دو راه برای تنظیم تاریخ و زمان ارائه میکردند، یا بهصورت دستی برای هر کاربر یا با تشخیص خودکار زمان، و با یکی از این گزینهها تنظیم میشد:
-
telephony
از سیگنال های تلفنی هویت شبکه و منطقه زمانی (NITZ) استفاده می کند. -
network
از سرورهای زمانی پروتکل زمان شبکه (NTP) استفاده می کند.
هر گزینه نیاز به اتصال به شبکه های خارجی دارد که همیشه در Android Automotive در دسترس نیستند. به عنوان مثال، در برخی از کشورها، برخی از خودروها ممکن است تلفن داخلی نداشته باشند. بنابراین، زمان سیستمهای ناوبری ماهوارهای جهانی (GNSS) بهعنوان منبعی از زمان سیستم در اختیار شما قرار میگیرد تا زمانی که اتصال شبکه در دسترس نیست، از آن استفاده کنید.
این نسخه اندرویدی آینده دو گزینه دیگر را برای شناسایی و تنظیم خودکار زمان ارائه می دهد:
-
gnss
از سیستم های ناوبری ماهواره ای جهانی (GNSS) استفاده می کند. -
external
از ویژگی VHAL یا System API استفاده می کند.
فعال کردن تشخیص خودکار زمان
برای فعال کردن تشخیص خودکار زمان، حتماً تنظیمات > تاریخ و زمان > تاریخ و زمان خودکار را انتخاب کنید:
شکل 1. تاریخ و زمان خودکار را انتخاب کنید
پیکربندی منابع زمانی
برای تعیین اینکه کدام منابع زمانی در تشخیص خودکار زمان گنجانده شود، و اولویتی که این منابع زمانی باید در نظر گرفته شوند، باید فایل پیکربندی منبع دستگاه، core/res/res/values/config.xml
را تغییر دهید:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list take precedence over lower ones. See com.android.server.timedetector.TimeDetectorStrategy for available sources. --> <string-array name="config_autoTimeSourcesPriority"> <item>telephony</item> <item>network</item> </string-array>
در این مثال، telephony
و network
در تشخیص خودکار زمان در نظر گرفته شده اند و پیشنهادات زمان telephony
قبل از پیشنهادات زمان network
اولویت بندی می شوند.
به طور کلی، اگر پیشنهاد نامعتبر باشد یا اگر پیشنهاد خیلی قدیمی باشد، پیشنهادات منبع با اولویت بالاتر نادیده گرفته می شوند. همچنین، اگر پیشنهاد معتبر با بالاترین اولویت با زمان ساعت فعلی سیستم دستگاه در عرض چند ثانیه مطابقت داشته باشد (مقدار پیشفرض دو (2) ثانیه است)، زمان تغییر نخواهد کرد.
محدودیت زمانی کمتر
Android 12 زمان کمتری را برای اعتبارسنجی پیشنهادات زمانی ارائه میکند. قبل از این ویژگی، تشخیص زمان خودکار زمان UTC ورودی پیشنهادی را تأیید نمیکند. با این ویژگی، زمان هایی که قبل از کران پایین می گذرد، کنار گذاشته می شوند.
مقدار کران پایین از تاریخ مشتق شده از مهر زمانی ساخت تعیین می شود. این بر این اصل کار می کند که یک زمان معتبر نمی تواند قبل از ساخته شدن تصویر سیستم رخ دهد. اندروید کران بالایی را اعمال نمی کند.
پیشنهادات زمان GNSS
منبع زمانی gnss
برای اندروید 12 جدید است و توسط سیگنال های GPS ارائه می شود. این یک منبع قابل اعتماد برای زمانی است که telephony
و network
در دسترس نیستند. این گزینه به GnssTimeUpdateService
جدید در SystemServer اضافه می شود که به طور غیر فعال به به روز رسانی های مکان گوش می دهد. هنگامی که یک مکان معتبر دریافت می شود، GnssTimeUpdateService
پیشنهادی را به TimeDetectorService
می دهد، که سپس تعیین می کند که آیا ساعت سیستم باید به روز شود یا خیر.
به طور پیش فرض، منبع زمانی gnss
در AOSP فعال نیست و بنابراین، باید توسط شرکا فعال شود:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list take precedence over lower ones. See com.android.server.timedetector.TimeDetectorStrategy for available sources. --> <string-array name="config_autoTimeSourcesPriority"> <item>telephony</item> <item>network</item> <item>gnss</item> </string-array> <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. --> <bool name="config_enableGnssTimeUpdateService">true</bool>
برای فعال کردن این ویژگی:
-
config_enableGnssTimeUpdateService
را به روز کنید. مقدارconfig_enableGnssTimeUpdateService
باید رویtrue
تنظیم شود. -
config_autoTimeSourcesPriority
را به روز کنید.gnss
باید به لیست موارد برایconfig_autoTimeSourcesPriority
اضافه شود. موقعیتgnss
در لیست اولویت، اولویت داده شده به پیشنهادات GNSS را با توجه به مقادیر منابع دیگر تعیین می کند.
تاثیر بر قدرت
GnssTimeUpdateService
به طور غیر فعال به به روز رسانی های مکان گوش می دهد، به این معنی که هرگز به طور فعال GPS را روشن نمی کند تا انرژی بیشتری مصرف کند. در نتیجه، توان مصرفی هنگام فعال بودن منبع GNSS ناچیز است. این همچنین به این معنی است که مگر اینکه برنامه یا سرویس دیگری در سیستم بهطور فعال درخواست بهروزرسانی مکان کند، GnssTimeUpdateService
بهروزرسانی مکان را دریافت نمیکند و زمان GNSS را پیشنهاد نمیکند.
تست کردن
مجموعه تست سازگاری (CTS)
یک آزمایش CTS برای تأیید اینکه زمان ارائه شده توسط GNSS در دسترس است ارائه شده است. برای جزئیات، به LocationShellCommand.java
مراجعه کنید.
تست های واحد
تست های واحد پایه را در فایل زیر مشاهده کنید:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
تست های دستی
برای آزمایش این ویژگی، دستورات جدیدی به LocationShellCommand.java
اضافه شده است. از این دستورات برای اضافه کردن ارائه دهندگان آزمایشی استفاده کنید که با آنها می توانید یک مکان و زمان GNSS مرتبط را مشخص کنید. GnssTimeUpdateService
به این بهروزرسانیهای مکان گوش میدهد و بهطور دورهای پیشنهادهایی ارائه میدهد.
توجه: رابط این دستورات ممکن است بین نسخه ها تغییر کند.
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
پیشنهادات زمانی خارجی
پیشنهادات زمان خارجی راه دیگری برای ارائه پیشنهادات زمانی خودکار به اندروید است. این گزینههای جدید شما را قادر میسازد تا پیشنهادات زمان کاملاً سفارشیشده را به اندروید ارائه دهید، که میتواند از ECUهای مختلف سرچشمه بگیرد که به نوبه خود میتوانند از ترکیبی از ساعت بیدرنگ، GNSS، NITZ یا هر منبع زمانی دیگری استفاده کنند.
پیشنهادات زیر در Android 12 برای در نظر گرفتن پیشنهادات زمان external
موجود است:
- خواص VHAL یک ویژگی VHAL جدید به نام
EPOCH_TIME
ارائه شده است. این ویژگی نشان دهنده تعداد میلی ثانیه هایی است که از 1/1/1970 UTC گذشته است. مقدار آن را می توان به AndroidTimeManager
منتقل کرد تا زمان سیستم جدید را پیشنهاد کند. نمونه ای از پیاده سازی VHAL که این ویژگی را به روز می کند در پیاده سازی مرجع زیر ارائه شده است. - API های سیستم روش جدیدی به نام
suggestExternalTime()
در TimeManager در دسترس است تا سیستم را با پیشنهاد زمان خارجی ارائه دهد. اگر سیستم به گونهای پیکربندی شده است که پیشنهادات زمان خارجی را در نظر بگیرد (با استفاده ازconfig_autoTimeSourcesPriority
در فایل پیکربندی)، در صورتی که هیچ پیشنهاد زمانی با اولویت بالاتر در دسترس نباشد، از مهر زمانی ارسال شده به این روش برای تنظیم زمان سیستم استفاده میشود.
شما می توانید یک راه حل زمان خارجی را به شرح زیر پیاده سازی کنید:
- فایل پیکربندی منبع (
core/res/res/values/config.xml
) را به روز کنید و سپس مقدارexternal
را بهconfig_autoTimeSourcesPriority
اضافه کنید:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
انجام این کار به اندروید دستور می دهد که هنگام تنظیم ساعت سیستم، به پیشنهادات زمان خارجی بالاترین اولویت را بدهد. سختافزار روی خودرو یک پیشنهاد تمبر زمانی به ویژگی جدید
EPOCH_TIME
VHAL مینویسد. - یک برنامه ارائه شده توسط فروشنده این ویژگی را می خواند و
TimeManager.suggestExternal()
را فراخوانی می کند. سپس اندروید می تواند از مهر زمانی ارائه شده به عنوان مقدار ساعت جدید سیستم استفاده کند.