إيقاف مشرف الجهاز نهائيًا بدءًا من الإصدار 9 من Android (المستوى 28 من واجهة برمجة التطبيقات)، سيتم وضع علامة على بعض سياسات المشرف بأنّها متوقّفة نهائيًا عند استدعائها من قِبل مشرف جهاز. ننصحك بالبدء في الاستعداد الآن لهذا التغيير. للاطّلاع على مزيد من المعلومات ومعرفة خيارات نقل البيانات، يُرجى قراءة مقالة إيقاف دور مشرف الجهاز نهائيًا.
يتيح نظام Android استخدام تطبيقات المؤسسات من خلال توفير واجهة برمجة التطبيقات Android Device Administration API. توفّر واجهة برمجة التطبيقات Device Administration API ميزات إدارة الأجهزة على مستوى النظام. تتيح لك واجهات برمجة التطبيقات هذه إنشاء تطبيقات تراعي الأمان وتُعد مفيدة في إعدادات المؤسسات، حيث يحتاج خبراء تكنولوجيا المعلومات إلى التحكّم بشكل كامل في أجهزة الموظفين. على سبيل المثال، استفاد تطبيق "بريد إلكتروني على Android" المضمّن من واجهات برمجة التطبيقات هذه لتحسين ميزات التوافق مع Exchange. من خلال تطبيق "البريد الإلكتروني"، يمكن لمشرفي Exchange فرض سياسات كلمات المرور، بما في ذلك كلمات المرور الأبجدية الرقمية أو أرقام أرقام التعريف الشخصية، على جميع الأجهزة. يمكن للمشرفين أيضًا محو بيانات الهواتف الجوّالة المفقودة أو المسروقة عن بُعد (أي استعادة الإعدادات التلقائية للمصنع). يمكن لمستخدمي Exchange مزامنة data البريد الإلكتروني والتقويم.
هذا المستند مخصّص للمطوّرين الذين يريدون تطوير حلول للمؤسسات على الأجهزة التي تعمل بنظام التشغيل Android. ويتناول المقال الميزات المختلفة التي تقدّمها Device Administration API لتوفير أمان أكبر لأجهزة الموظفين التي تعمل بنظام التشغيل Android.
ملاحظة للحصول على معلومات عن إنشاء "وحدة تحكّم في سياسة العمل" لعمليات نشر "Android للعمل"، يُرجى الاطّلاع على إنشاء وحدة تحكّم في سياسة الجهاز.
وضع مالك الجهاز بدون واجهة مستخدم
يقدّم نظام التشغيل Android 14 (المستوى 34 لواجهة برمجة التطبيقات) وضع "النظام بلا واجهة مستخدم رسومية" (Headless System User Mode) (الأجهزة التي
تعرض UserManager.isHeadlessSystemUserMode
true
). في هذا الوضع، يكون مستخدم النظام هو
مستخدم في الخلفية ويعتمد على مستخدمين إضافيين في المقدّمة لتفاعل العميل
النهائي. يقدّم نظام التشغيل Android 14 أيضًا
وضع مالك الجهاز بلا واجهة مستخدم رسومية،
الذي يضيف مالك ملف شخصي إلى كل
المستخدمين المرتبطين
باستثناء مستخدم النظام الذي تم ضبط مالك الجهاز عليه.
في الأجهزة التي تم ضبطها باستخدام مستخدم نظام بدون واجهة (حيث يعمل مستخدم النظام
في الخلفية)، لا يتم تطبيق سوى سياسات الجهاز التي تكون عالمية النطاق
(السياسات التي تنطبق على جميع المستخدمين) على المستخدمين
في المقدّمة. يُرجى الاطّلاع على
addUserRestriction
لمعرفة التفاصيل.
يمكن لشركات تصنيع أجهزة Android الرجوع إلى الإرشادات المنشورة على source.android.com.
نظرة عامة على واجهة برمجة التطبيقات لإدارة الأجهزة
في ما يلي أمثلة على أنواع التطبيقات التي قد تستخدم واجهة برمجة التطبيقات Device Administration API:
- برامج البريد الإلكتروني
- تطبيقات الأمان التي تُجري عملية محو البيانات عن بُعد
- خدمات وتطبيقات إدارة الأجهزة
كيف تعمل هذه الميزة؟
يمكنك استخدام واجهة برمجة التطبيقات Device Administration API لكتابة تطبيقات مشرف الجهاز التي يثبّتها المستخدمون على أجهزتهم. يفرض تطبيق "مشرف الجهاز" السياسات المطلوبة. إليك آلية العمل:
- يكتب مشرف النظام تطبيقًا خاصًا بمشرف الجهاز يفرض سياسات أمان الجهاز عن بُعد أو على الجهاز. يمكن أن تكون هذه السياسات مضمّنة في رمز برمجي ثابت في التطبيق، أو يمكن للتطبيق جلب السياسات ديناميكيًا من أحد الخوادم التابعة لجهة خارجية.
- تم تثبيت التطبيق على أجهزة المستخدمين. لا يتوفر لدى Android
حلّ مبرمَج لتوفير الأجهزة في الوقت الحالي. في ما يلي بعض الطرق التي يمكن أن يتبعها مشرف النظام لتوزيع التطبيق على المستخدمين:
- Google Play.
- تفعيل التثبيت من متجر آخر
- توزيع التطبيق من خلال وسائل أخرى، مثل البريد الإلكتروني أو المواقع الإلكترونية
- يطلب النظام من المستخدم تفعيل تطبيق مشرف الجهاز. ويعتمد كيفية حدوث ذلك ووقت حدوثه على كيفية تنفيذ التطبيق.
- بعد أن يفعّل المستخدمون تطبيق "مشرف الجهاز"، يخضعون لسياساته. ويمنح الامتثال لهذه السياسات عادةً مزايا، مثل الوصول إلى الأنظمة والبيانات الحسّاسة.
إذا لم يفعِّل المستخدمون تطبيق "مشرف الجهاز"، سيظل مثبّتًا على الجهاز، ولكن في حالة غير نشطة. ولن يخضع المستخدمون لسياسات التطبيق، ولن يحصلوا على أي من مزاياه، على سبيل المثال، قد لا يتمكّنوا من مزامنة البيانات.
إذا لم يلتزم أحد المستخدمين بالسياسات (على سبيل المثال، إذا ضبط مستخدم ملفًا شخصيًا بكلمة مرور تنتهك الإرشادات)، يُرجى العِلم أنّه على التطبيق تحديد كيفية التعامل مع ذلك. ومع ذلك، سيؤدي ذلك عادةً إلى عدم التمكّن من مزامنة البيانات.
إذا حاول جهاز الاتصال بخادم يتطلّب سياسات غير متوافقة مع Device Administration API، لن تتم السماح بالاتصال. لا تسمح واجهة برمجة التطبيقات Device Administration API حاليًا بإعداد الأجهزة جزئيًا. بعبارة أخرى، إذا كان أحد الأجهزة (مثل جهاز قديم) لا يتيح جميع السياسات المذكورة، لن يكون هناك أي طريقة للسماح للجهاز بالاتصال.
إذا كان الجهاز يحتوي على تطبيقات مشرف متعددة مفعَّلة، يتم تطبيق السياسة الأكثر صرامة. لا تتوفّر طريقة لاستهداف تطبيق مشرف معيّن.
لإزالة تثبيت تطبيق حالي لإدارة الجهاز، على المستخدمين أولاً إلغاء تسجيل التطبيق كمشرف.
السياسات
في بيئة المؤسسات، غالبًا ما يكون على أجهزة الموظفين الالتزام بمجموعة صارمة من السياسات التي تحكم استخدام الجهاز. تتوافق واجهة برمجة التطبيقات Device Administration API مع السياسات المدرَجة في الجدول 1. يُرجى العِلم أنّ واجهة برمجة التطبيقات Device Administration API لا تتيح حاليًا استخدام كلمات المرور إلا لقفل الشاشة:
السياسة | الوصف |
---|---|
تم تفعيل كلمة المرور | تتطلّب هذه الميزة أن تطلب الأجهزة إدخال رقم تعريف شخصي أو كلمات مرور. |
الحد الأدنى لطول كلمة المرور | اضبط العدد المطلوب من الأحرف لكلمة المرور. على سبيل المثال، يمكنك اشتراط أن تحتوي كلمات المرور أو أرقام التعريف الشخصي على ستة أحرف على الأقل. |
يجب استخدام كلمة مرور أبجدية رقمية | تتطلب أن تحتوي كلمات المرور على مزيج من الأحرف والأرقام. ويمكن أن تتضمّن أحرفًا رمزية. |
يجب إدخال كلمة مرور معقّدة. | تتطلّب هذه الميزة أن تحتوي كلمات المرور على حرف واحد ورمز رقمي ورمز خاص على الأقل. تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور لجميع المشرفين أو مشرف معيّن تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى لعدد الأحرف الصغيرة المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف العميقة المطلوبة في كلمة المرور لجميع المشرفين أو مشرف معيّن تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى لعدد الأحرف غير الأبجدية المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف غير الأبجدية المطلوبة في كلمة المرور لجميع المشرفين أو لأحدهم على وجه التحديد تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى للأرقام المطلوبة في كلمة المرور | الحد الأدنى لعدد الأرقام المطلوبة في كلمة المرور لجميع المشرفين أو لأحدهم على وجه التحديد تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى لعدد الرموز المطلوبة في كلمة المرور | الحد الأدنى لعدد الرموز المطلوبة في كلمة المرور لجميع المشرفين أو مشرف معيّن تم طرحها في الإصدار 3.0 من Android. |
الحد الأدنى لعدد الأحرف الكبيرة المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف الكبيرة المطلوبة في كلمة المرور لجميع المشرفين أو لأحدهم على وجه التحديد تم طرحها في الإصدار 3.0 من Android. |
مهلة انتهاء صلاحية كلمة المرور | وقت انتهاء صلاحية كلمة المرور، ويتم التعبير عنه كفرق بالملي ثانية من وقت ضبط مشرف الجهاز لمهلة انتهاء الصلاحية. تم طرحها في الإصدار 3.0 من Android. |
حظر سجلّ كلمات المرور | تمنع هذه السياسة المستخدمين من إعادة استخدام آخر n كلمة مرور فريدة.
يتم استخدام هذه السياسة عادةً مع
setPasswordExpirationTimeout() ، التي تفرض
على المستخدمين تعديل كلمات المرور بعد مرور فترة زمنية محدّدة.
تم طرحها في الإصدار 3.0 من Android. |
الحد الأقصى لعدد محاولات إدخال كلمة المرور | تُستخدَم لتحديد عدد المرات التي يمكن للمستخدم فيها إدخال كلمة المرور غير الصحيحة قبل أن تتم برمجة الجهاز لحذف بياناته. تسمح واجهة برمجة التطبيقات Device Administration API للمشرفين أيضًا ب إعادة ضبط الجهاز عن بُعد على الإعدادات التلقائية الأصلية. ويؤدي ذلك إلى تأمين البيانات في حال فقدان الجهاز أو سرقته. |
قفل الحد الأقصى المسموح به لوقت عدم النشاط | يضبط هذا الإعداد المدة التي يتم بعدها قفل الشاشة على الجهاز منذ آخر مرة لمس فيها المستخدم الشاشة أو ضغط على زر. وعندما يحدث ذلك، يحتاج المستخدمون إلى إدخال رقم التعريف الشخصي أو كلمات المرور مرة أخرى قبل أن يتمكّنوا من استخدام أجهزتهم والوصول إلى البيانات. يمكن أن تتراوح القيمة بين دقيقة واحدة و60 دقيقة. |
طلب تشفير مساحة التخزين | يحدِّد هذا الخيار أنّه يجب تشفير مساحة التخزين، إذا كان الجهاز يتيح ذلك. تم طرحها في الإصدار 3.0 من Android. |
إيقاف الكاميرا | يحدِّد هذا الخيار أنّه يجب إيقاف الكاميرا. يُرجى العلم أنّه ليس بالضرورة أن يكون هذا الإجراء دائمًا. يمكن تفعيل الكاميرا أو إيقافها ديناميكيًا استنادًا إلى السياق والوقت وما إلى ذلك. تم طرحها في Android 4.0. |
ميزات أخرى
بالإضافة إلى توافقها مع السياسات المدرَجة في الجدول أعلاه، تتيح لك واجهة برمجة التطبيقات Device Administration API إجراء ما يلي:
- اطلب من المستخدم ضبط كلمة مرور جديدة.
- قفل الجهاز على الفور
- محو بيانات الجهاز (أي إعادة ضبط الجهاز على الإعدادات التلقائية الأصلية)
نموذج تطبيق
تستند الأمثلة المستخدَمة في هذه الصفحة إلى واجهة برمجة التطبيقات Device Administration API
التي تم تضمينها في نماذج حزمة SDK (متوفّرة من خلال
Android SDK Manager) ويمكن العثور عليها في نظامك باسم
<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
.
يقدّم نموذج التطبيق عرضًا توضيحيًا لميزات مشرف الجهاز. يقدّم هذا التطبيق للمستخدمين واجهة مستخدم تتيح لهم تفعيل تطبيق "مشرف الجهاز". وبعد تفعيل التطبيق، يمكنهم استخدام الأزرار في واجهة المستخدم للقيام بما يلي:
- ضبط جودة كلمة المرور
- حدِّد متطلبات كلمة مرور المستخدم، مثل الحد الأدنى للطول والحد الأدنى لعدد الأحرف الرقمية التي يجب أن تحتوي عليها، وما إلى ذلك.
- اضبط كلمة المرور. إذا لم تكن كلمة المرور متوافقة مع السياسات المحدّدة، يعرض النظام رسالة خطأ.
- اضبط عدد محاولات إدخال كلمة المرور الفاشلة التي يمكن إجراؤها قبل أن يتم محو بيانات الجهاز (أي إعادة ضبطه على الإعدادات الأصلية).
- حدِّد مدة انتهاء صلاحية كلمة المرور.
- اضبط طول سجلّ كلمات المرور (يشير length إلى عدد كلمات المرور القديمة المخزّنة في السجلّ). يمنع ذلك المستخدمين من إعادة استخدام إحدى آخر n كلمة مرور استخدموها سابقًا.
- حدِّد أنّه يجب تشفير مساحة التخزين، إذا كان الجهاز يتيح ذلك.
- يمكنك ضبط الحد الأقصى لمدة عدم النشاط التي يمكن أن تنتهي قبل أن يتم قفل الجهاز.
- قفل الجهاز على الفور
- محو بيانات الجهاز (أي استعادة الإعدادات الأصلية)
- أوقِف الكاميرا.
تطوير تطبيق لإدارة الأجهزة
يمكن لمشرفي النظام استخدام واجهة برمجة التطبيقات Device Administration API لكتابة تطبيق يفرض سياسة أمان الجهاز عن بُعد أو على الجهاز. يلخِّص هذا القسم الخطوات المُتعلّقة بإنشاء تطبيق إدارة الأجهزة.
إنشاء ملف البيان
لاستخدام Device Administration API، يجب أن يتضمّنملف بيان التطبيق ما يلي:
- فئة فرعية من
DeviceAdminReceiver
تتضمّن ما يلي:- إذن
BIND_DEVICE_ADMIN
- القدرة على الاستجابة لهدف
ACTION_DEVICE_ADMIN_ENABLED
، المُعبَّر عنه في البيان على أنّه فلتر أهداف
- إذن
- بيان بسياسات الأمان المستخدَمة في البيانات الوصفية
في ما يلي مقتطف من نموذج بيان إدارة الأجهزة:
<activity android:name=".app.DeviceAdminSample" android:label="@string/activity_sample_device_admin"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.SAMPLE_CODE" /> </intent-filter> </activity> <receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver" android:label="@string/sample_device_admin" android:description="@string/sample_device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
يُرجى العلم بما يلي:
- تشير السمات التالية إلى موارد السلاسل التي تقع في ملف
ApiDemos/res/values/strings.xml
لنموذج التطبيق. لمزيد من المعلومات عن الموارد، يُرجى الاطّلاع على موارد التطبيق.- يشير الرمز
android:label="@string/activity_sample_device_admin"
إلى التصنيف القابل للقراءة من قِبل المستخدم للنشاط. - يشير
android:label="@string/sample_device_admin"
إلى التصنيف المفهوم للمستخدم للإذن. - يشير
android:description="@string/sample_device_admin_description"
إلى الوصف القابل للقراءة من قِبل المستخدم للإذن. ويكون الوصف عادةً أطول وأكثر معلومات مقارنةً بالتصنيف.
- يشير الرمز
android:permission="android.permission.BIND_DEVICE_ADMIN"
هو إذن يجب أن تمتلكه فئة فرعية منDeviceAdminReceiver
لضمان أنّ النظام فقط يمكنه التفاعل مع جهاز الاستقبال (لا يمكن منح أي تطبيق هذا الإذن). ويؤدي ذلك إلى منع التطبيقات الأخرى من إساءة استخدام تطبيق مشرف الجهاز.android.app.action.DEVICE_ADMIN_ENABLED
هو الإجراء الأساسي الذي يجب أن تتعامل معه فئة فرعيةDeviceAdminReceiver
لكي تتمكّن من إدارة جهاز. يتم ضبط هذا الإعداد على المستلِم عندما يفعّل المستخدم تطبيق مشرف الجهاز. عادةً ما يعالج الرمز البرمجي هذا فيonEnabled()
. لكي يكون هذا الإجراء متاحًا، يجب أن يطلب المستلِم أيضًا إذنBIND_DEVICE_ADMIN
حتى لا تتمكّن التطبيقات الأخرى من إساءة استخدامه.- عندما يفعّل المستخدم تطبيق مشرف الجهاز، يمنح ذلك جهاز الاستقبال إذنًا بتنفيذ إجراءات استجابةً لبث أحداث نظام معيّنة. وعند حدوث حدث مناسب، يمكن للتطبيق فرض سياسة. على سبيل المثال، إذا حاول المستخدم ضبط كلمة مرور جديدة لا تستوفي متطلبات السياسة، يمكن للتطبيق أن يطلب من المستخدم اختيار كلمة مرور مختلفة تستوفي المتطلبات.
- تجنَّب تغيير اسم المستلِم بعد نشر تطبيقك. في حال تغيُّر الاسم فيملف البيان، سيتم إيقاف مشرف الجهاز عندما يُحدِّث المستخدمون التطبيق. لمزيد من المعلومات، يُرجى الاطّلاع على
<receiver>
. android:resource="@xml/device_admin_sample"
يُعلن عن سياسات الأمان المستخدَمة في البيانات الوصفية. تقدّم البيانات الوصفية معلومات إضافية خاصة بمدير الجهاز، كما تُحلّلها فئةDeviceAdminInfo
. في ما يلي محتوىdevice_admin_sample.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>
عند تصميم تطبيق إدارة الأجهزة، لا تحتاج إلى تضمين جميع السياسات، بل فقط السياسات ذات الصلة بتطبيقك.
لمزيد من المناقشة حول ملف البيان، يُرجى الاطّلاع على دليل مطوّري تطبيقات Android.تنفيذ الرمز البرمجي
تتضمّن واجهة برمجة التطبيقات Device Administration API الفئات التالية:
DeviceAdminReceiver
- الفئة الأساسية لتنفيذ مكوّن إدارة الجهاز توفّر هذه الفئة
سهولة في تفسير إجراءات النية الأوّلية التي يرسلها
النظام. يجب أن يتضمّن تطبيق "إدارة الأجهزة" فئة فرعية
DeviceAdminReceiver
. DevicePolicyManager
- صف لإدارة السياسات المفروضة على جهاز. يجب أن يكون معظم عملاء
هذه الفئة قد نشروا
DeviceAdminReceiver
فعّله المستخدِم حاليًا. يديرDevicePolicyManager
السياسات المتعلقة بمثيل واحد أو أكثر منDeviceAdminReceiver
.
DeviceAdminInfo
- تُستخدَم هذه الفئة لتحديد البيانات الوصفية لمكوّن مشرف الجهاز.
توفّر هذه الفئات الأساس لتطبيق إدارة أجهزة يعمل بشكل كامل.
يوضّح الجزء المتبقّي من هذا القسم كيفية استخدام واجهات برمجة التطبيقات DeviceAdminReceiver
و
DevicePolicyManager
لكتابة تطبيق إدارة أجهزة.
إنشاء فئة فرعية من DeviceAdminReceiver
لإنشاء تطبيق مشرف جهاز، يجب إنشاء فئة فرعية
DeviceAdminReceiver
. تتألّف فئة DeviceAdminReceiver
من سلسلة من وظائف الاستدعاء التي يتم تشغيلها عند وقوع أحداث معيّنة.
في الفئة الفرعية DeviceAdminReceiver
، يعرض نموذج التطبيق
ببساطة إشعار Toast
استجابةً لأحداث
معيّنة. مثلاً:
Kotlin
class DeviceAdminSample : DeviceAdminReceiver() { private fun showToast(context: Context, msg: String) { context.getString(R.string.admin_receiver_status, msg).let { status -> Toast.makeText(context, status, Toast.LENGTH_SHORT).show() } } override fun onEnabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_enabled)) override fun onDisableRequested(context: Context, intent: Intent): CharSequence = context.getString(R.string.admin_receiver_status_disable_warning) override fun onDisabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_disabled)) override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) = showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)) ... }
Java
public class DeviceAdminSample extends DeviceAdminReceiver { void showToast(Context context, String msg) { String status = context.getString(R.string.admin_receiver_status, msg); Toast.makeText(context, status, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_enabled)); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_disabled)); } @Override public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) { showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)); } ... }
تفعيل التطبيق
من الأحداث الرئيسية التي يجب أن يتعامل معها تطبيق مشرف الجهاز هو إشعال المستخدم للتطبيق. على المستخدم تفعيل التطبيق صراحةً لتطبيق السياسات. إذا اختار المستخدم عدم تفعيل التطبيق، سيظل متوفّرًا على الجهاز، ولكن لن يتم فرض سياساته ولن يستفيد المستخدم من أي من مزايا التطبيق.
تبدأ عملية تفعيل التطبيق عندما ينفِّذ المستخدم
إجراءً يؤدي إلى بدء ACTION_ADD_DEVICE_ADMIN
القصد. في المثال المعروض في التطبيق، يحدث ذلك عندما ينقر المستخدم على مربّع الاختيار تفعيل ميزة
المشرف.
عندما ينقر المستخدم على مربّع الاختيار تفعيل المشرف، تتغيّر الشاشة ويُطلب من المستخدم تفعيل تطبيق مشرف الجهاز، كما هو موضّح في الشكل 2.
في ما يلي الرمز الذي يتم تنفيذه عندما ينقر المستخدم على مربّع الاختيار تفعيل المشرف. يؤدي ذلك إلى بدء دالّة callback الخاصة بـ
onPreferenceChange()
. يتمّ استدعاء هذا المرجع الخلفي عندما يغيّر المستخدم قيمة Preference
هذه، ويكون على وشك ضبطها و/أو الاحتفاظ بها. إذا كان المستخدم بصدد تفعيل التطبيق، تتغيّر الشاشة ويُطلب منه تفعيل تطبيق مشرف الجهاز، كما هو موضّح في الشكل
2. بخلاف ذلك، يتم إيقاف تطبيق مشرف الجهاز.
Kotlin
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { if (super.onPreferenceChange(preference, newValue)) return true val value = newValue as Boolean if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply { putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample) putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)) } startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN) // return false - don't update checkbox until we're really active return false } else { dpm.removeActiveAdmin(deviceAdminSample) enableDeviceCapabilitiesArea(false) adminActive = false } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value) } return true }
Java
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (super.onPreferenceChange(preference, newValue)) { return true; } boolean value = (Boolean) newValue; if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); // return false - don't update checkbox until we're really active return false; } else { dpm.removeActiveAdmin(deviceAdminSample); enableDeviceCapabilitiesArea(false); adminActive = false; } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value); } return true; }
يشير السطر
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdminSample)
إلى أنّ mDeviceAdminSample
(وهو
أحد مكونات DeviceAdminReceiver
) هو السياسة المستهدَفة.
يُستخدَم هذا السطر لتشغيل واجهة المستخدم الموضّحة في الشكل 2، والتي ترشِد المستخدمين خلال عملية
إضافة مشرف الجهاز إلى النظام (أو تسمح لهم برفضه).
عندما يحتاج التطبيق إلى تنفيذ عملية تعتمد على تفعيل
تطبيق مشرف الجهاز، يؤكد التطبيق أنّه
نشط. ولإجراء ذلك، يتم استخدام طريقة DevicePolicyManager
isAdminActive()
. يُرجى ملاحظة أنّ DevicePolicyManager
الطريقة isAdminActive()
تأخذ DeviceAdminReceiver
مكوّنًا كوسيطة لها:
Kotlin
private lateinit var dpm: DevicePolicyManager ... private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
Java
DevicePolicyManager dpm; ... private boolean isActiveAdmin() { return dpm.isAdminActive(deviceAdminSample); }
إدارة السياسات
DevicePolicyManager
هي فئة عامة لإدارة السياسات
المُطبَّقة على جهاز. تدير أداة DevicePolicyManager
السياسات لمثيل واحد
أو أكثر من DeviceAdminReceiver
.
يمكنك الحصول على اسم معرِّف للموقع الإلكتروني على النحو التالي:DevicePolicyManager
Kotlin
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Java
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
يوضّح هذا القسم كيفية استخدام DevicePolicyManager
لتنفيذ
المهام الإدارية:
ضبط سياسات كلمة المرور
يتضمّن DevicePolicyManager
واجهات برمجة تطبيقات لضبط
سياسة كلمة مرور الجهاز وفرضها. في واجهة Device Administration API، لا تنطبق كلمة المرور إلا على
قفل الشاشة. يصف هذا القسم المهام الشائعة المتعلّقة بكلمات المرور.
ضبط كلمة مرور للجهاز
يعرض هذا الرمز واجهة مستخدم تطلب من المستخدم ضبط كلمة مرور:
Kotlin
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) }
Java
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent);
ضبط جودة كلمة المرور
يمكن أن تكون جودة كلمة المرور إحدى الثوابت DevicePolicyManager
التالية:
PASSWORD_QUALITY_ALPHABETIC
- على المستخدم إدخال كلمة مرور تحتوي على أحرف أبجدية (أو رموز أخرى) على الأقل.
PASSWORD_QUALITY_ALPHANUMERIC
- على المستخدم إدخال كلمة مرور تحتوي على كل من الأحرف والأرقام (أو الرموز الأخرى) على الأقل.
PASSWORD_QUALITY_NUMERIC
- على المستخدم إدخال كلمة مرور تحتوي على أحرف رقمية على الأقل.
PASSWORD_QUALITY_COMPLEX
- يجب أن يكون المستخدم قد أدخل كلمة مرور تحتوي على حرف ورمزًا خاصًا و رقمًا على الأقل.
PASSWORD_QUALITY_SOMETHING
- تتطلب السياسة استخدام نوع معيّن من كلمة المرور، ولكن لا يهمّها نوعها.
PASSWORD_QUALITY_UNSPECIFIED
- لا تفرض السياسة أي متطلبات على كلمة المرور.
على سبيل المثال، في ما يلي كيفية ضبط سياسة كلمة المرور لطلب كلمة مرور أبجدية رقمية:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
تحديد متطلبات محتوى كلمة المرور
بدءًا من Android 3.0، تتضمّن فئة DevicePolicyManager
طُرقًا تتيح لك ضبط محتوى كلمة المرور. على سبيل المثال، يمكنك ضبط سياسة تنص على أنّ كلمات المرور يجب أن تحتوي على n حرفًا كبيرًا على الأقل. في ما يلي طرق تحسين محتويات
كلمة المرور:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
على سبيل المثال، يشير المقتطف التالي إلى أنّ كلمة المرور يجب أن تحتوي على حرفَين كبيرَين على الأقل:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwMinUppercase = 2 ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwMinUppercase = 2; ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
ضبط الحد الأدنى لطول كلمة المرور
يمكنك تحديد الحد الأدنى لطول كلمة المرور. مثلاً:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwLength: Int = ... ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwLength; ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
ضبط الحد الأقصى لعدد محاولات إدخال كلمة المرور
يمكنك ضبط الحد الأقصى لعدد محاولات إدخال كلمة المرور غير الناجحة المسموح بها قبل حجب بيانات الجهاز (أي إعادة ضبطه على الإعدادات الأصلية). مثلاً:
Kotlin
val dPM:DevicePolicyManager private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val maxFailedPw: Int = ... ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int maxFailedPw; ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
ضبط مهلة انتهاء صلاحية كلمة المرور
بدءًا من Android 3.0، يمكنك استخدام الأسلوب
setPasswordExpirationTimeout()
لتحديد وقت انتهاء صلاحية كلمة المرور، ويتم التعبير عنها كفرق في المللي ثانية من وقت ضبط مشرف الجهاز لمهلة انتهاء الصلاحية. مثلاً:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwExpiration: Long = ... ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; long pwExpiration; ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
تقييد كلمة المرور استنادًا إلى السجلّ
بدءًا من الإصدار 3.0 من Android، يمكنك استخدام setPasswordHistoryLength()
طريقة لمنع
المستخدمين من إعادة استخدام كلمات المرور القديمة. تستخدِم هذه الطريقة مَعلمة length
التي تحدِّد عدد كلمات المرور
القديمة التي يتم تخزينها. عندما تكون هذه السياسة نشطة، لا يمكن للمستخدمين إدخال كلمة مرور جديدة تطابق آخر n كلمة مرور. ويمنع ذلك
المستخدمين من استخدام كلمة المرور نفسها مرارًا وتكرارًا. يتم استخدام هذه السياسة عادةً
مع
setPasswordExpirationTimeout()
،
التي تفرض على المستخدمين
تعديل كلمات المرور بعد مرور فترة زمنية محدّدة.
على سبيل المثال، يمنع هذا المقتطف المستخدمين من إعادة استخدام أي من كلمات المرور الخمس الأخيرة:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwHistoryLength = 5 ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwHistoryLength = 5; ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);
ضبط قفل الجهاز
يمكنك ضبط الحد الأقصى لمدة عدم نشاط المستخدم التي يمكن أن تحدث قبل قفل الجهاز. مثلاً:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val timeMs: Long = 1000L * timeout.text.toString().toLong() ... dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... long timeMs = 1000L*Long.parseLong(timeout.getText().toString()); dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);
يمكنك أيضًا إبلاغ الجهاز آليًا بقفله على الفور:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
Java
DevicePolicyManager dpm; dpm.lockNow();
إجراء عملية محو البيانات
يمكنك استخدام DevicePolicyManager
الطريقة
wipeData()
لإعادة ضبط الجهاز على الإعدادات الأصلية. يكون هذا الإجراء مفيدًا
في حال فقدان الجهاز أو سرقته. غالبًا ما يكون قرار محو بيانات الجهاز هو
نتيجة استيفاء شروط معيّنة. على سبيل المثال، يمكنك استخدام
setMaximumFailedPasswordsForWipe()
للإشارة إلى أنّه يجب
حجب بيانات الجهاز بعد عدد معيّن من محاولات إدخال كلمة المرور الفاشلة.
يمكنك محو البيانات باتّباع الخطوات التالية:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.wipeData(0)
Java
DevicePolicyManager dpm; dpm.wipeData(0);
تأخذ طريقة wipeData()
معلَمة
على أنّها قناع بتات للخيارات الإضافية. يجب أن تكون القيمة حاليًا 0.
إيقاف الكاميرا
بدءًا من الإصدار 4.0 من نظام التشغيل Android، يمكنك إيقاف الكاميرا. يُرجى العِلم أنّ هذا الإجراء ليس بالضرورة أن يكون إيقافًا نهائيًا. يمكن تفعيل الكاميرا أو إيقافها بشكل ديناميكي استنادًا إلى السياق والوقت وما إلى ذلك.
يمكنك التحكّم في ما إذا كانت الكاميرا غير مفعّلة باستخدام الطريقة
setCameraDisabled()
. على سبيل المثال، يضبط المقتطف التالي الكاميرا لتصبح مفعَّلة أو غير مفعَّلة استنادًا إلى إعداد مربّع الاختيار:
Kotlin
private lateinit var disableCameraCheckbox: CheckBoxPreference private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
Java
private CheckBoxPreference disableCameraCheckbox; DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());
تشفير مساحة التخزين
بدءًا من الإصدار 3.0 من Android، يمكنك استخدام الأسلوب
setStorageEncryption()
لضبط سياسة تتطلب تشفير مساحة التخزين، حيثما كان ذلك متاحًا.
مثلاً:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setStorageEncryption(deviceAdminSample, true)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
اطّلِع على نموذج Device Administration API للحصول على مثال كامل حول كيفية تفعيل تشفير مساحة التخزين.
عيّنات تعليمات برمجية إضافية
توضّح نماذج Android AppRestrictionEnforcer وDeviceOwner استخدام واجهات برمجة التطبيقات التي تتناولها هذه الصفحة.