إيقاف مشرف الجهاز نهائيًا بدءًا من نظام التشغيل Android 9 (المستوى 28 من واجهة برمجة التطبيقات)، سيضع مشرف الجهاز علامة على بعض سياسات المشرفين تشير إلى أنّها متوقّفة نهائيًا عندما يستدعيها أحد مشرفي الجهاز. ننصحك بالبدء بالاستعداد لهذا التغيير الآن. لمزيد من المعلومات والاطّلاع على خيارات نقل البيانات، يُرجى الاطّلاع على إيقاف مشرف الجهاز نهائيًا.
يشمل نظام Android دعمًا لتطبيقات المؤسسات من خلال تقديم واجهة برمجة التطبيقات لإدارة جهاز Android. توفر واجهة برمجة تطبيقات إدارة الجهاز ميزات إدارة الجهاز على مستوى النظام. تسمح لك واجهات برمجة التطبيقات هذه بإنشاء تطبيقات مدركة للأمان تكون مفيدة في إعدادات المؤسسة، والتي يطلب فيها أخصائيو تكنولوجيا المعلومات تحكُّمًا جيدًا في أجهزة الموظفين. على سبيل المثال، استفاد تطبيق "البريد الإلكتروني" لنظام التشغيل Android من واجهات برمجة التطبيقات هذه لتحسين دعم Exchange. ومن خلال تطبيق البريد الإلكتروني، يمكن لمشرفي Exchange فرض سياسات كلمات المرور — بما في ذلك كلمات المرور الأبجدية الرقمية أو أرقام التعريف الشخصية الرقمية — عبر الأجهزة. يمكن للمشرفين أيضًا مسح البيانات عن بُعد (أي استعادة الإعدادات الافتراضية للمصنع) الهواتف المفقودة أو المسروقة. يمكن لمستخدمي Exchange مزامنة بيانات البريد الإلكتروني والتقويم.
هذا المستند معد للمطورين الذين يرغبون في تطوير حلول مؤسسية للأجهزة التي تعمل بنظام تشغيل Android. كما يناقش الميزات المختلفة التي تقدمها واجهة برمجة التطبيقات لإدارة الجهاز لتوفير أمان أقوى لأجهزة الموظفين التي تعمل بنظام التشغيل Android.
ملاحظة: لمزيد من المعلومات حول إنشاء وحدة تحكم في سياسات العمل لعمليات نشر Android for Work، راجع إنشاء وحدة تحكم في سياسة الجهاز.
نظرة عامة على واجهة برمجة التطبيقات لإدارة الجهاز
إليك أمثلة على أنواع التطبيقات التي قد تستخدم Device Administration API:
- برامج البريد الإلكتروني
- تطبيقات الأمان التي تجري عملية المسح عن بُعد.
- خدمات وتطبيقات إدارة الأجهزة.
آلية العمل
ويمكنك استخدام واجهة برمجة التطبيقات لإدارة الأجهزة لكتابة تطبيقات مشرف الجهاز التي يثبّتها المستخدمون على أجهزتهم. سيفرض تطبيق مشرف الجهاز السياسات المطلوبة. إليك آلية العمل:
- يكتب أحد مشرفي النظام تطبيق مشرف الجهاز الذي يفرض سياسات أمان للأجهزة عن بُعد/محلي. قد تكون هذه السياسات برمجيًا بشكل ثابت في التطبيق، أو يمكن للتطبيق جلب السياسات ديناميكيًا من خادم تابع لجهة خارجية.
- تثبيت التطبيق على أجهزة المستخدمين لا يتضمن نظام Android
حاليًا حل إدارة الحسابات التلقائية. في ما يلي بعض الطرق التي يمكن أن يوزّع بها مسؤول إدارة النظم
التطبيق على المستخدمين:
- Google Play.
- جارٍ تفعيل التثبيت من متجر آخر.
- توزيع التطبيق عبر وسائل أخرى مثل البريد الإلكتروني أو المواقع الإلكترونية
- يطلب النظام من المستخدم تفعيل تطبيق مشرف الجهاز. وتعتمد كيفية ووقت حدوث ذلك على كيفية تنفيذ التطبيق.
- بعد تفعيل المستخدمين لتطبيق مشرف الجهاز، يخضعون لسياساته. عادةً ما يمنح الالتزام بهذه السياسات مزايا، مثل الوصول إلى الأنظمة والبيانات الحساسة.
في حال عدم تفعيل المستخدمين لتطبيق مشرف الجهاز، سيظل التطبيق على الجهاز ولكن في حالة غير نشطة. لن يخضع المستخدمون لسياساته، ولن يحصلوا على أي من مزايا التطبيق، على سبيل المثال قد لا يتمكّنون من مزامنة البيانات.
في حال عدم التزام المستخدم بالسياسات (على سبيل المثال، في حال ضبط المستخدم كلمة مرور تخالف الإرشادات)، يعود إلى التطبيق تحديد كيفية التعامل مع هذه المشاكل. ومع ذلك، سيؤدي هذا عادةً إلى عدم قدرة المستخدم على مزامنة البيانات.
إذا حاول أحد الأجهزة الاتصال بخادم يتطلب سياسات غير متوافقة مع واجهة برمجة التطبيقات لإدارة الأجهزة، لن يتم السماح بالاتصال. لا تسمح واجهة برمجة التطبيقات لإدارة الجهاز حاليًا بالإدارة الجزئية. بمعنى آخر، إذا كان أحد الأجهزة (على سبيل المثال، جهاز قديم) غير متوافق مع جميع السياسات المذكورة، لا توجد طريقة للسماح للجهاز بالاتصال.
إذا كان الجهاز يحتوي على عدة تطبيقات مشرف مفعّلة، يتم فرض السياسة الأكثر صرامة. ليست هناك طريقة لاستهداف تطبيق مشرف معين.
لإلغاء تثبيت تطبيق مشرف جهاز حالي، يحتاج المستخدمون أولاً إلى إلغاء تسجيل التطبيق كمشرف.
السياسات
في بيئة المؤسسة، غالبًا ما يجب أن تلتزم أجهزة الموظفين بمجموعة صارمة من السياسات التي تحكم استخدام الجهاز. تدعم واجهة برمجة التطبيقات لإدارة الأجهزة السياسات المدرجة في الجدول 1. تجدر الإشارة إلى أنّ واجهة برمجة التطبيقات لإدارة الأجهزة لا تتيح حاليًا سوى كلمات المرور لقفل الشاشة:
الجدول 1. السياسات المتوافقة مع Device Administration API
السياسة | الوصف |
---|---|
تم تفعيل كلمة المرور | يتطلب أن تطلب الأجهزة رقم التعريف الشخصي أو كلمات المرور. |
الحد الأدنى لطول كلمة المرور | اضبط عدد الأحرف المطلوب لكلمة المرور. على سبيل المثال، يمكنك طلب رقم التعريف الشخصي أو كلمات المرور تتكون من ستة أحرف على الأقل. |
يجب إدخال كلمة مرور أبجدية رقمية. | يتطلب أن تحتوي كلمات المرور على مزيج من الأحرف والأرقام. قد تتضمن حروفًا رمزية. |
يجب إدخال كلمة مرور معقدة | تتطلب أن تحتوي كلمات المرور على حرف ورقم عددي ورمز خاص على الأقل. تم طرحه في Android 3.0. |
الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور لجميع المشرفين أو لمدير معين. تم طرحه في Android 3.0. |
يجب إدخال أحرف صغيرة كحد أدنى في كلمة المرور. | الحد الأدنى لعدد الأحرف الصغيرة المطلوبة في كلمة المرور لجميع المشرفين أو لمشرف معين. تم طرحه في Android 3.0. |
الحد الأدنى المطلوب لعدد الأحرف غير الأبجدية في كلمة المرور | الحدّ الأدنى لعدد الأحرف التي ليست من الأحرف الأبجدية المطلوبة في كلمة المرور لجميع المشرفين أو لمشرف معيّن. تم طرحه في Android 3.0. |
الحد الأدنى للأرقام المطلوبة في كلمة المرور | تمثّل هذه السمة الحد الأدنى لعدد الأرقام المطلوبة في كلمة المرور لجميع المشرفين أو لمشرف معيّن. تم طرحه في Android 3.0. |
الحد الأدنى من الرموز المطلوبة في كلمة المرور | الحدّ الأدنى لعدد الرموز المطلوبة في كلمة المرور لجميع المشرفين أو لمشرف معيّن. تم طرحه في Android 3.0. |
يجب إدخال أحرف كبيرة كحد أدنى في كلمة المرور. | الحد الأدنى لعدد الأحرف الكبيرة المطلوبة في كلمة المرور لجميع المشرفين أو لمشرف معيّن. تم طرحه في Android 3.0. |
انتهاء صلاحية كلمة المرور | وقت انتهاء صلاحية كلمة المرور، يتم التعبير عنها في صورة دلتا بالمللي ثانية من وقت تعيين مشرف الجهاز مهلة انتهاء الصلاحية. تم طرحه في Android 3.0. |
تقييد سجلّ كلمات المرور | تمنع هذه السياسة المستخدمين من إعادة استخدام آخر n كلمات مرور فريدة.
يتم عادةً استخدام هذه السياسة مع السياسة
setPasswordExpirationTimeout() ، التي تفرض على
المستخدمين تعديل كلمات مرورهم بعد انقضاء مدة زمنية محدّدة.
تم طرحه في Android 3.0. |
الحد الأقصى للمحاولات الفاشلة لإدخال كلمة المرور | لتحديد عدد المرات التي يمكن للمستخدم فيها إدخال كلمة مرور غير صحيحة قبل أن يمسح الجهاز بياناته. تسمح واجهة برمجة تطبيقات إدارة الجهاز أيضًا للمشرفين بإعادة ضبط الجهاز عن بُعد على الإعدادات الافتراضية للمصنع. يؤدي ذلك إلى تأمين البيانات في حالة فقدان الجهاز أو سرقته. |
قفل الحد الأقصى لمدة عدم النشاط | تحدِّد المدة الزمنية منذ آخر لمسة للمستخدم للشاشة أو ضغطها على زر قبل أن يقفل الجهاز الشاشة. عندما يحدث هذا، يحتاج المستخدمون إلى إدخال رقم التعريف الشخصي أو كلمات المرور مرة أخرى قبل أن يتمكنوا من استخدام أجهزتهم والوصول إلى البيانات. يمكن أن تتراوح القيمة بين دقيقة واحدة و60 دقيقة. |
طلب تشفير مساحة التخزين | لتحديد أنه يجب تشفير منطقة التخزين، إذا كان الجهاز يتيح ذلك. تم طرحه في Android 3.0. |
إيقاف الكاميرا | تحدِّد هذه السياسة وجوب إيقاف الكاميرا. لاحظ أنه لا ينبغي أن يكون هذا تعطيلاً دائمًا. يمكن تفعيل الكاميرا أو إيقافها ديناميكيًا بناءً على السياق والوقت وما إلى ذلك. تم طرحه في Android 4.0. |
ميزات أخرى
بالإضافة إلى دعم السياسات المذكورة في الجدول أعلاه، تتيح لك واجهة برمجة التطبيقات Device Administration API ما يلي:
- مطالبة المستخدم بضبط كلمة مرور جديدة.
- قفل الجهاز فورًا.
- امسح بيانات الجهاز (أي استعادة الجهاز إلى الإعدادات التلقائية للمصنع).
نموذج التطبيق
تستند الأمثلة المستخدَمة في هذه الصفحة إلى عيّنة من واجهة برمجة التطبيقات لإدارة الأجهزة
المضمّنة في نماذج حزمة تطوير البرامج (SDK) (المتوفّرة من خلال
"مدير SDK لنظام التشغيل Android") والمتوفّرة في نظامك باسم
<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
.
يقدم نموذج التطبيق عرضًا توضيحيًا لميزات مشرف الجهاز. يقدّم للمستخدمين واجهة مستخدم تتيح لهم تفعيل تطبيق مشرف الجهاز. وبعد تفعيل التطبيق، يمكنهم استخدام الأزرار في واجهة المستخدم لتنفيذ ما يلي:
- ضبط جودة كلمة المرور
- حدِّد متطلبات كلمة مرور المستخدم، مثل الحد الأدنى للطول والحد الأدنى لعدد الأحرف الرقمية التي يجب أن تحتوي عليها، وما إلى ذلك.
- اضبط كلمة المرور. وإذا لم تتوافق كلمة المرور مع السياسات المحددة، يعرض النظام رسالة خطأ.
- اضبط عدد المحاولات الفاشلة لإدخال كلمات المرور قبل أن يتم حجب بيانات الجهاز (أي تتم إعادته إلى إعدادات المصنع).
- اضبط المدة التي ستنتهي صلاحية كلمة المرور خلالها من الآن.
- ضبط طول سجل كلمات المرور (يشير الطول إلى عدد كلمات المرور القديمة المخزنة في السجل). يمنع ذلك المستخدمين من إعادة استخدام واحدة من آخر n كلمات مرور استخدموها سابقًا.
- حدد أنه يجب تشفير منطقة التخزين، إذا كان الجهاز يتيح ذلك.
- قم بتعيين الحد الأقصى لوقت عدم النشاط الذي قد يمر قبل قفل الجهاز.
- اضبط قفل الجهاز على الفور.
- حجب بيانات الجهاز (أي استعادة الإعدادات الأصلية).
- إيقاف الكاميرا

الشكل 1. لقطة شاشة لنموذج التطبيق
تطوير تطبيق لإدارة الأجهزة
يمكن لمشرفي النظام استخدام واجهة برمجة التطبيقات لإدارة الجهاز لكتابة تطبيق يفرض فرض سياسة أمان الأجهزة البعيدة/المحلية. يلخص هذا القسم الخطوات المتضمنة في إنشاء تطبيق إدارة جهاز.
إنشاء البيان
لاستخدام واجهة برمجة تطبيقات إدارة الجهاز، يجب أن يتضمن بيان التطبيق ما يلي:
- فئة فرعية من
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
لكتابة تطبيق مشرف الجهاز.
جهاز DeviceAdminAdmin للفئة الفرعية
لإنشاء تطبيق مشرف جهاز، يجب ضبط الفئة الفرعية
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)) ... }
جافا
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.

الشكل 2. نموذج التطبيق: تفعيل التطبيق
في ما يلي الرمز الذي يتم تنفيذه عندما ينقر المستخدم على مربّع الاختيار تفعيل المشرف. ويحدث ذلك نتيجة تفعيل معاودة الاتصال بـ
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 }
جافا
@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)
جافا
DevicePolicyManager dpm; ... private boolean isActiveAdmin() { return dpm.isAdminActive(deviceAdminSample); }
إدارة السياسات
DevicePolicyManager
هي فئة عامة لإدارة السياسات
المفروضة على أحد الأجهزة. يدير DevicePolicyManager
السياسات لنسخة DeviceAdminReceiver
واحدة أو أكثر.
يمكنك الحصول على اسم حساب على DevicePolicyManager
على النحو التالي:
لغة Kotlin
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
جافا
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
يوضّح هذا القسم كيفية استخدام DevicePolicyManager
لأداء المهام الإدارية:
ضبط سياسات كلمات المرور
يتضمّن DevicePolicyManager
واجهات برمجة تطبيقات لإعداد
سياسة كلمة مرور الجهاز وفرضها. في واجهة برمجة تطبيقات إدارة الأجهزة، لا تسري كلمة المرور
إلا على قفل الشاشة. يصف هذا القسم المهام الشائعة المتعلقة بكلمة المرور.
ضبط كلمة مرور للجهاز
يعرض هذا الرمز واجهة مستخدم تطلب من المستخدم ضبط كلمة مرور:
لغة Kotlin
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) }
جافا
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)
جافا
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)
جافا
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)
جافا
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)
جافا
DevicePolicyManager dpm; ComponentName deviceAdminSample; int maxFailedPw; ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
ضبط مهلة انتهاء صلاحية كلمة المرور
بدايةً من الإصدار 3.0 من نظام التشغيل Android، يمكنك استخدام الطريقة
setPasswordExpirationTimeout()
لضبط وقت انتهاء صلاحية كلمة المرور، ويتم التعبير عنها في صورة دلتا بالمللي ثانية من وقت ضبط مشرف الجهاز لمهلة انتهاء الصلاحية. على سبيل المثال:
لغة Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwExpiration: Long = ... ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
جافا
DevicePolicyManager dpm; ComponentName deviceAdminSample; long pwExpiration; ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
تقييد كلمة المرور استنادًا إلى السجلّ
وبدايةً من نظام التشغيل Android 3.0، يمكنك استخدام طريقة
setPasswordHistoryLength()
للحد من قدرة المستخدمين
على إعادة استخدام كلمات المرور القديمة. تأخذ هذه الطريقة معلَمة length
التي تحدد عدد كلمات المرور القديمة المخزّنة. عند تفعيل هذه السياسة، لا يمكن للمستخدمين إدخال كلمة مرور جديدة تتطابق مع آخر n كلمة مرور. يمنع ذلك المستخدمين من استخدام كلمة المرور نفسها مرارًا وتكرارًا. يتم عادةً استخدام هذه السياسة
مع السياسة
setPasswordExpirationTimeout()
،
التي تفرض على المستخدمين
تعديل كلمات المرور بعد انقضاء مدة زمنية محدّدة.
على سبيل المثال، يمنع هذا المقتطف المستخدمين من إعادة استخدام أي من كلمات المرور الخمس الأخيرة:
لغة Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwHistoryLength = 5 ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
جافا
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)
جافا
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... long timeMs = 1000L*Long.parseLong(timeout.getText().toString()); dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);
يمكنك أيضًا طلب قفل الجهاز آليًا على الفور:
لغة Kotlin
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
جافا
DevicePolicyManager dpm; dpm.lockNow();
إجراء حجب البيانات
يمكنك استخدام طريقة DevicePolicyManager
wipeData()
لإعادة ضبط الجهاز على الإعدادات الأصلية. ويكون ذلك مفيدًا في حالة
فقدان الجهاز أو سرقته. غالبًا ما يكون قرار مسح الجهاز نتيجة
استيفاء شروط معينة. على سبيل المثال، يمكنك استخدام
setMaximumFailedPasswordsForWipe()
للإشارة إلى ضرورة حجب بيانات جهاز بعد عدد محدد من المحاولات الفاشلة لإدخال كلمة المرور.
يمكنك مسح البيانات على النحو التالي:
لغة Kotlin
private lateinit var dpm: DevicePolicyManager dpm.wipeData(0)
جافا
DevicePolicyManager dpm; dpm.wipeData(0);
تستخدم الطريقة wipeData()
قناعًا قليلاً للخيارات الإضافية لتكون معلَمة لها. في الوقت الحالي، يجب أن تكون القيمة 0.
إيقاف الكاميرا
بدءًا من نظام التشغيل Android 4.0، يمكنك إيقاف الكاميرا. ولاحظ أن هذا لا يجب أن يكون إيقافه بشكل دائم. يمكن تفعيل الكاميرا أو إيقافها ديناميكيًا بناءً على السياق والوقت وما إلى ذلك.
ويمكنك التحكّم في إيقاف الكاميرا باستخدام
طريقة setCameraDisabled()
. على سبيل المثال، يحدِّد هذا المقتطف تفعيل الكاميرا أو إيقافها استنادًا إلى أحد إعدادات مربّع الاختيار:
لغة Kotlin
private lateinit var disableCameraCheckbox: CheckBoxPreference private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
جافا
private CheckBoxPreference disableCameraCheckbox; DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());
تشفير مساحة التخزين
بدايةً من نظام التشغيل Android 3.0، يمكنك استخدام الطريقة
setStorageEncryption()
لضبط سياسة تتطلب تشفير منطقة التخزين، إذا كان ذلك متاحًا.
على سبيل المثال:
لغة Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setStorageEncryption(deviceAdminSample, true)
جافا
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
راجع نموذج واجهة برمجة التطبيقات لإدارة الأجهزة للحصول على مثال كامل حول كيفية تفعيل تشفير وحدة التخزين.
نماذج تعليمات برمجية إضافية
يوضّح نموذجا Android AppRestrictionEnforcer وDeviceOwner بشكل أكبر استخدام واجهات برمجة التطبيقات المشمولة في هذه الصفحة.