يوضّح دليل المطوّرين هذا كيفية إدارة جهاز التحكّم في سياسة الجهاز (DPC) لتعديلات نظام Android نيابةً عن مستخدم الجهاز.
مقدّمة
يمكن لأجهزة Android تلقّي التحديثات عبر شبكة غير سلكيّة (OTA) وتثبيتها على النظام. والبرامج التطبيقية. يُرسِل Android إشعارًا إلى مستخدم الجهاز بأنّه يتم تحديث النظام. ويمكن لمستخدم الجهاز تثبيت التحديث على الفور أو لاحقًا.
وباستخدام وحدة التحكّم بسياسة الجهاز (DPC)، يمكن لمشرف تكنولوجيا المعلومات إدارة تحديثات النظام لمستخدم الجهاز. وحدات التحكّم بسياسة الجهاز (DPC) امتلاك جهاز مُدار بالكامل (يُسمى مالك الجهاز) أو امتلاك ملف شخصي للعمل (يُعرف باسم مالك الملف التجاري). يوضح الجدول 1 كيفية إدارة مالكي الأجهزة للنظام التحديثات، بينما يمكن لمالكي الملفات الشخصية الإبلاغ عن المعلومات المتعلقة بتحديثات النظام فقط.
الجدول 1: تعتمد المهام المتاحة لوحدات التحكّم بسياسة الجهاز على وضع المالك.
البحث عن تحديثات في انتظار المراجعة
التحديث في انتظار المراجعة هو تحديث نظام لجهاز لم يتم تثبيته بعد. يمكن لوحدة التحكُّم بسياسة الجهاز (DPC) مساعدة مشرفي تكنولوجيا المعلومات في التحقُّق من الأجهزة التي تتضمن تحديثات النظام في انتظار المراجعة، وكذلك أو مطالبة مستخدمي الأجهزة بتثبيت التحديثات المهمة على الفور.
مالكو الأجهزة ومالكي الملفات الشخصية التي تعمل بنظام التشغيل Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث
التحقّق مما إذا كان الجهاز يحتوي على تحديث نظام في انتظار المراجعة. اتصل بالرقم
DevicePolicyManager.getPendingSystemUpdate()
الذي يعرض الرمز null
إذا كان الجهاز محدَّثًا. في حال كان هناك تحديث للنظام في انتظار التثبيت
فإن الطريقة تُرجع معلومات حول التحديث.
مزيد من المعلومات عن التحديث في انتظار المراجعة
بعد طلب getPendingSystemUpdate()
، يمكنك فحص الأجهزة التي تم إرجاعها
يمكنك الاطّلاع على القيمة SystemUpdateInfo
لمعرفة المزيد من المعلومات عن التعديل الذي في انتظار المراجعة. تشير رسالة الأشكال البيانية
يوضّح المثال التالي كيفية معرفة وقت إطلاق تحديث معلَّق لأول مرة
المتاحة للجهاز:
Kotlin
val firstAvailable = dpm.getPendingSystemUpdate(adminName)?.receivedTime firstAvailable?.let { Log.i(TAG, "Update first available: ${Date(firstAvailable)}") }
Java
SystemUpdateInfo updateInfo = dpm.getPendingSystemUpdate(adminName); if (updateInfo != null) { Long firstAvailable = updateInfo.getReceivedTime(); Log.i(TAG, "Update first available: " + new Date(firstAvailable)); }
عمليات استدعاء النظام
عند توفُّر تحديث، يُرسِل نظام Android إشعارات إلى مالكي الجهاز بشأن التحديث الجديد. في الإصدار 8.0 من نظام التشغيل Android أو الإصدارات الأحدث، يرسل النظام إشعارًا إلى مالكي الملفات الشخصية أيضًا.
في الفئة الفرعية DeviceAdminReceiver
، يمكنك إلغاء
onSystemUpdatePending()
معاودة الاتصال. لست بحاجة إلى تسجيل DPC أو الإعلان عنه لتلقّي المكالمة. قد يتعرض النظام
استدعاء هذه الطريقة أكثر من مرة لتحديث واحد، لذا تحقق من حالة التحديث
قبل الاستجابة. يمكنك الاتصال بالرقم getPendingSystemUpdate()
للاطّلاع على مزيد من المعلومات عن
تحديث النظام في عملية معاودة الاتصال. يوضّح المثال التالي كيفية إجراء ذلك:
Kotlin
/** * Called when a new update is available. */ override fun onSystemUpdatePending(context: Context?, intent: Intent?, receivedTime: Long) { // System update information is supported in API level 26 or higher. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return } val updateInfo = getManager(context) .getPendingSystemUpdate(getWho(context)) ?: return if (updateInfo.securityPatchState == SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) { // Perhaps install because this is a security patch. // ... } }
Java
/** * Called when a new update is available. */ public void onSystemUpdatePending (Context context, Intent intent, long receivedTime) { // System update information is supported in API level 26 or higher. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return; } SystemUpdateInfo updateInfo = getManager(context) .getPendingSystemUpdate(getWho(context)); if (updateInfo == null) { return; } if (updateInfo.getSecurityPatchState() == SystemUpdateInfo.SECURITY_PATCH_STATE_TRUE) { // Perhaps install because this is a security patch. // ... } }
عندما يتضمّن النظام أكثر من وحدة تحكّم بسياسة الجهاز (DPC) واحدة، مثل الملفات الشخصية للعمل في حسابات مُدارة بالكامل جهاز واحد، سيتم معاودة الاتصال بكل من مالك الجهاز ومالك الملف الشخصي.
تعديل السياسات
يمكن لصاحب الجهاز التحكّم في وقت تثبيت التحديثات من خلال ضبط سياسة تحديث النظام على الجهاز. هناك ثلاثة أنواع من سياسة تحديثات النظام:
- تلقائي
- يتم تثبيت تحديثات النظام فور توفُّرها متاحة (بدون تفاعل المستخدم). يؤدي ضبط نوع السياسة هذا إلى تثبيت أي تحديثات في انتظار المراجعة على الفور. التي يمكن تأجيلها أو انتظار نافذة صيانة.
- نافذة
- يتم تثبيت تحديثات النظام أثناء عملية الصيانة اليومية. (بدون تفاعل المستخدم). اضبط وقتَي بدء نافذة الصيانة اليومية وانتهائها، بدقيقتَي اليوم، عند إنشاء سياسة جديدة مستندة إلى نافذة زمنية.
- مؤجلة
- تأجيل تثبيت تحديثات النظام لمدة 30 يومًا بعد 30 يومًا عند انتهاء فترة زمنية معينة، سيطلب النظام من مستخدم الجهاز تثبيت التحديث.
فترات التأجيل
يفرض النظام قيودًا على فترة كل تحديث لمدة 30 يومًا. تبدأ الفترة عندما يؤجل النظام التحديث لأول مرة، ولن يؤدي ضبط سياسات تأجيل جديدة إلى إطالة هذه الفترة.
بالإضافة إلى التأجيل، قد يتعذّر على Android تثبيت تحديث لأسباب أخرى، مثل عدم توفّر اتصال بالإنترنت أو عدم توفّر مساحة كافية على القرص أو انخفاض طاقة البطارية.
يعيد النظام ضبط موقّت التأجيل الذي يبلغ 30 يومًا في حال حدوث تحديث مختلف. متاحة خلال تلك الفترة، ما يمنح مشرفي تكنولوجيا المعلومات فرصة لتجربة النظام المدمج التحديثات. بعد مرور 30 يومًا بدون توفُّر تحديث جديد، يطلب النظام من المستخدم تثبيت جميع التحديثات المعلّقة. وعندما يتوفر تحديث نظام جديد في وقت لاحق، تبدأ فترة 30 يومًا من جديد.
طريقة ضبط سياسة
يمكنك ضبط سياسات التحديث في الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. لتحديد
الوقت الذي ينبغي فيه تثبيت تحديثات النظام على الجهاز، فأنشئ مثيلاً
SystemUpdatePolicy
باستخدام أحد الأنواع الثلاثة الموضّحة
أعلاه. لضبط سياسة، يطلب مالك الجهاز طريقة DevicePolicyManager
.
setSystemUpdatePolicy()
يوضّح رمز النموذج التالي كيفية إجراء ذلك. للاطّلاع على مثال على سياسة ذات إطار زمني، اطّلِع على مستندات SystemUpdatePolicy
.
Kotlin
// Create the system update policy to postpone installation for 30 days. val policy = SystemUpdatePolicy.createPostponeInstallPolicy() // Get a DevicePolicyManager instance to set the policy on the device. val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) // Set the policy. dpm.setSystemUpdatePolicy(adminName, policy)
Java
// Create the system update policy to postpone installation for 30 days. SystemUpdatePolicy policy = SystemUpdatePolicy.createPostponeInstallPolicy(); // Get a DevicePolicyManager instance to set the policy on the device. DevicePolicyManager dpm = (DevicePolicyManager) context .getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); // Set the policy. dpm.setSystemUpdatePolicy(adminName, policy);
لا يمكن تغيير نُسخ السياسة بعد إنشائها. لتغيير وقت تثبيت التحديثات على أحد الأجهزة، يمكنك إنشاء سياسة جديدة وضبطها. لإزالة سياسة من
جهاز، يمكنك استدعاء setSystemUpdatePolicy()
مع تمرير null
كوسيطة policy
.
بعد أن تزيل وحدة التحكّم بسياسة الجهاز إحدى السياسات، سيظهر لمستخدم الجهاز إشعارات لأي من هذه السياسات.
تحديثات النظام المتوفرة.
يمكن للتطبيقات الاتصال بالرقم getSystemUpdatePolicy()
للحصول على
السياسة الحالية للجهاز. وإذا أرجعت هذه الطريقة القيمة null
، يعني ذلك أنّ
لم يتم ضبط السياسة حاليًا.
فترات تجميد البيانات
تجميد إصدار نظام التشغيل خلال الفترات المهمة، مثل العطلات أو الأنشطة الأخرى المزدحمة يمكن لمالكي الأجهزة تعليق تحديثات النظام لمدة تصل إلى 90 يومًا. عندما الجهاز ضمن فترة إيقاف التحديثات، وهو يتصرف على النحو التالي:
- لا يتلقّى الجهاز أي إشعارات بشأن تحديثات النظام في انتظار المراجعة.
- لم يتم تثبيت تحديثات النظام على نظام التشغيل.
- لا يمكن لمستخدمي الأجهزة البحث يدويًا عن تحديثات النظام من خلال "الإعدادات".
يفرض النظام فترة احتياطي إلزامي تبلغ 60 يومًا بعد أي تجميد بيانات محدَّد. فترات منع تجميد الجهاز إلى أجل غير مسمى. تذكر أن نظام التجميد يمكن أن تمنع التحديثات الأجهزة من تلقّي تحديثات مهمة.
يتم ضبط فترات إيقاف التحديثات على سياسة التحديث. لا يمكنك ضبط فترات تجميد البيانات بدون ضبط سياسة عندما يكون الجهاز خارج أي فترات تجميد بيانات تحددها، ينطبق السلوك العادي للسياسة (تلقائي أو تم إدراجه في النافذة أو تم تأجيله).
كيفية ضبط فترة تجميد
يمكنك ضبط فترات إيقاف التحديثات في Android 9 (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. يضبط مالك الجهاز فترة تجميد على سياسة تحديث النظام قبل ضبط السياسة للجهاز. الخطوات هي:
- أنشئ سياسة جديدة (أو احصل على السياسة الحالية) لتحديث النظام.
- يمكنك ضبط فترات تجميد الحساب في السياسة من خلال الاتصال بالرقم
setFreezePeriods()
. - يمكنك ضبط السياسة وإيقاف الفترات مؤقتًا للجهاز من خلال الاتصال.
setSystemUpdatePolicy()
ولأنّ فترة التجميد تتكرّر سنويًا، يتم تمثيل تاريخَي بدء الفترة وانتهائها بقيم الشهر واليوم. يجب أن يبدأ يوم البدء في بعد 60 يومًا على الأقل من نهاية أي فترة تعليق سابقة. المثال التالي يوضّح هذا العمود كيفية ضبط فترتَين لإيقاف التحديثات لسياسة تحديث النظام الحالية:
Kotlin
// Get the existing policy from the DevicePolicyController instance. val policy = dpm.systemUpdatePolicy ?: return try { // Set the two annual freeze periods on the policy for our retail // point-of-sale devices. val summerSale = FreezePeriod( MonthDay.of(6, 1), MonthDay.of(7, 31)) // Jun 1 - Jul 31 inclusive val winterSale = FreezePeriod( MonthDay.of(11, 20), MonthDay.of(1, 12)) // Nov 20 - Jan 12 inclusive policy.freezePeriods = Arrays.asList(summerSale, winterSale) // Set the policy again to activate the freeze periods. dpm.setSystemUpdatePolicy(adminName, policy) } catch (e: SystemUpdatePolicy.ValidationFailedException) { // There must be previous periods recorded on the device because // summerSale and winterSale don’t overlap and are separated by more // than 60 days. Report the overlap ... }
Java
// Get the existing policy from the DevicePolicyController instance. SystemUpdatePolicy policy = dpm.getSystemUpdatePolicy(); try { // Set the two annual freeze periods on the policy for our // retail point-of-sale devices. FreezePeriod summerSale = new FreezePeriod( MonthDay.of(6, 1), MonthDay.of(7, 31)); // Jun 1 - Jul 31 inclusive FreezePeriod winterSale = new FreezePeriod( MonthDay.of(11, 20), MonthDay.of(1, 12)); // Nov 20 - Jan 12 inclusive policy.setFreezePeriods(Arrays.asList(summerSale, winterSale)); // Don’t forget to set the policy again to activate the freeze periods. dpm.setSystemUpdatePolicy(adminName, policy); } catch (SystemUpdatePolicy.ValidationFailedException e) { // There must be previous periods recorded on the device because summerSale // and winterSale don’t overlap and are separated by more than 60 days. // Report the overlap ... }
يشمل كل من يوم البدء ويوم الانتهاء. إذا كان يوم البدء أكبر
مقارنةً بيوم الانتهاء (مثل winterSale
في المثال السابق)، يعني ذلك أنّ تجميد البيانات
فترة تمتد إلى العام التالي.
عند ضبط "تجميد" فترات سياسة تحديث النظام، واختبارات Android للمتطلبات التالية:
- لا تتجاوز فترة إيقاف الميزة 90 يومًا.
- لا تقل الفاصل الزمني بين فترات إيقاف التحديثات عن 60 يومًا.
- لا تتداخل فترات التوقف عن العمل.
- ما مِن فترات تجميد بيانات مكرّرة.
عند ضبط سياسة تحديث النظام لأحد الأجهزة، يكرِّر Android هذه الاختبارات. ويشمل ذلك أي فترات تجميد بيانات حالية أو سابقة للجهاز.
يطرح Android الرمز SystemUpdatePolicy.ValidationFailedException
عند
فشل أي من هذه الاختبارات.
للحصول على قائمة بفترات إيقاف التحديثات التي تم ضبطها سابقًا على عنصر سياسة تحديث النظام،
يمكن لجميع التطبيقات المثبّتة الاتصال
SystemUpdatePolicy.getFreezePeriods()
ما يلي:
على سبيل المثال، هذه الطريقة لتسجيل فترات تجميد الجهاز:
Kotlin
// Log any freeze periods that might be set on a system update policy. dpm.systemUpdatePolicy?.freezePeriods?.forEach { Log.i(TAG, "Freeze period: $it") }
Java
// Log any freeze periods that might be set on a system update policy. SystemUpdatePolicy currentPolicy = dpm.getSystemUpdatePolicy(); if (currentPolicy != null) { // A policy might not be set. for (FreezePeriod freezePeriod : currentPolicy.getFreezePeriods()) { Log.i(TAG, "Freeze period: " + freezePeriod.toString()); } }
سنوات كبيسة
يستخدم Android تقويم ISO 8601 (المعروف أيضًا بالتقويم الميلادي) لتنفيذ ما يلي: وحساب فترات التجميد ويتجاهل السنوات الكبيسة. وهذا يعني أنّه لا يتم التعرّف على 29 شباط (فبراير) كتاريخ صالح، ويتم التعامل معه كما لو كان 28 شباط (فبراير). وبالتالي، لا يتم احتساب يوم 29 شباط (فبراير) عند احتساب مدة التجميد. الفترة.
التطوير والاختبار
أثناء تطوير واختبار ميزة تحديث النظام في وحدة التحكّم بسياسة الجهاز (DPC)، قد بحاجة إلى إنشاء العديد من فترات التوقف. لأنّ Android يتحقّق من فاصل زمني مدته 60 يومًا بين فترات إيقاف التحديثات السابقة، قد لا تتمكّن من ضبط فترة إيقاف جديدة. بدون محو سجل الفترات الماضية أولاً. لمحو سجلّ مدّة تجميد الجهاز، شغِّل الأمر التالي في واجهة Android Debug Bridge (adb):
adb shell dpm clear-freeze-period-record
يمكنك التأكد من أنّ الجهاز في فترة توقُّف عن العمل من خلال التحقّق من أنّ المستخدم تم إيقاف الواجهة لتحديثات النظام.
تحديثات نظام Google Play (Mainline)
يتم تلقائيًا تنزيل تحديثات نظام Google Play (المعروفة أيضًا باسم تحديثات Mainline)، ولكن يجب إعادة تشغيل الجهاز لتثبيتها. هذه فلن تؤدي التحديثات إلى إعادة تشغيل الجهاز تلقائيًا وبدلاً من ذلك، يتم تثبيتها على إعادة التشغيل التي بدأها المستخدم أو المشرف أو السياسة التالية. ستؤدي عمليات إعادة التشغيل من خلال سياسة تحديث النظام إلى تثبيت تحديث نظام Google/المصنّع الأصلي للجهاز المرتبط وأي تحديثات لنظام Google Play سبق أن تم تنزيلها.
يمكن أيضًا تثبيت تحديثات نظام Google Play يدويًا من خلال الانتقال إلى الإعدادات > لمحة عن > إصدار Android > تحديث نظام Google Play
العودة إلى الإصدار السابق من التحديث
في بعض الحالات، يمكن استخدام أداة العودة إلى الإصدار السابق من تحديث نظام Google Play (GPSUR) يتم استخدامه لاسترداد حالة الجهاز بسبب حدوث مشكلة في تحديث نظام Google Play. التثبيت. ويجب استخدام هذه الأداة من قبل المستخدمين المتقدمين أو عندما يتم توجيههم إلى تنفيذ لذلك من خلال موظفي الدعم لأنه قد يؤدي إلى فقدان البيانات. في ما يلي كيفية استخدام GPSUR الأداة:
- إذا كان لديك Android Debug Bridge (adb) يعمل على جهازك، أوقِف
خدمة adb قبل المتابعة بحيث لا تتداخل مع
العودة إلى الحالة السابقة. لإيقاف adb، شغِّل
adb kill-server
. - افتح أداة GPSUR.
- انقر على السماح بالوصول إلى ADB للسماح للأداة بالتواصل مع الجهاز الاختباري من خلال adb.
- انقر على إضافة جهاز جديد.
- اختَر جهازك من القائمة وانقر على اتصال. قد لا تتضمن هذه القائمة تحتوي على اسم الجهاز بالكامل.
- على شاشة جهازك، اختَر السماح دائمًا من هذا الكمبيوتر وانقر على حسنًا لقبول اتصال تصحيح أخطاء USB.
- اختَر الجهاز المتصل في المتصفّح.
- يجب أن يتم تبديل نص الزر في الصفحة من لا تتوفّر إمكانية العودة إلى الحالة السابقة إلى استعادة التحديثات الأخيرة في حال توفُّر إمكانية العودة إلى الإصدارات السابقة على جهازك انقر على استرجاع التحديثات الأخيرة.
- اقرأ التحذيرات في نافذة تأكيد العودة إلى الحالة السابقة وانقر على تأكيد.
- انتظِر حتى تكتمل عملية التراجع. بعد اكتمال العودة إلى الحالة السابقة بنجاح سيظهر الشكل وستتم إعادة تشغيل الجهاز. يمكنك الآن فصل جهازك عن مصدر الطاقة بأمان الخاص بك.
مصادر إضافية
لمزيد من المعلومات عن تحديثات النظام، يُرجى الاطّلاع على مستندات تحديثات عبر شبكة غير سلكية (OTA) في مشروع Android Open Source Project.