إيقاف مشرف الجهاز. بدءًا من الإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات)، سيتم وضع علامة على بعض سياسات المشرفين على أنّها متوقّفة نهائيًا في حال استدعِه مشرف الجهاز. ننصحك بالبدء في الاستعداد الآن لهذا التغيير. للتعلّم واطلع على خيارات الترحيل، واقرأ إيقاف مشرف الجهاز
يتيح نظام التشغيل Android استخدام تطبيقات المؤسسات من خلال توفير واجهة برمجة التطبيقات لإدارة جهاز Android توفر واجهة برمجة التطبيقات لإدارة الجهاز الأجهزة الميزات الإدارية على مستوى النظام. تتيح لك واجهات برمجة التطبيقات هذه إنشاء وهي تطبيقات تتضمن إعدادات الأمان وتكون مفيدة في إعدادات المؤسسات المحترفين يتطلب تحكمًا غنيًا في أجهزة الموظفين. على سبيل المثال، استفاد تطبيق البريد الإلكتروني المدمج في Android من واجهات برمجة التطبيقات هذه لتحسين دعم Exchange. ويمكن لمشرفي Exchange من خلال تطبيق البريد الإلكتروني فرض سياسات كلمات المرور، بما في ذلك كلمات المرور الأبجدية الرقمية أو أرقام التعريف الشخصية — على جميع الأجهزة. يمكن للمشرفين أيضًا مسح البيانات عن بُعد (أي لاستعادة إعدادات المصنع الافتراضية) الهواتف المفقودة أو المسروقة. يمكن لمستخدمي Exchange المزامنة بيانات البريد الإلكتروني والتقويم الخاصة بهم.
هذا المستند مخصّص للمطوّرين الذين يريدون تطوير المؤسسات كحلول للأجهزة التي تعمل بنظام التشغيل Android. يناقش الميزات المختلفة التي توفرها واجهة برمجة التطبيقات لإدارة الأجهزة لتوفير مستوى أمان أعلى من أجهزة الموظفين التي تعمل بنظام التشغيل Android.
ملاحظة لمزيد من المعلومات حول إنشاء سياسة عمل عمليات نشر وحدة التحكم في Android for Work، راجع إنشاء "وحدة التحكّم بسياسة الجهاز"
وضع مالك الجهاز بلا واجهة مستخدم رسومية
يوفِّر Android 14 (المستوى 34 لواجهة برمجة التطبيقات) وضع مستخدم النظام بلا واجهة مستخدم رسومية (الأجهزة في
أي
UserManager.isHeadlessSystemUserMode
تعرض true
). في وضع مستخدم النظام بلا واجهة مستخدم رسومية، يكون مستخدم النظام
مستخدم في الخلفية وتعتمد على مستخدمين إضافيين في المقدّمة لدى المستخدم النهائي
التفاعل. يقدّم Android 14 أيضًا
لمالك الجهاز التابع لمالك الجهاز بلا واجهة مستخدم رسومية،
والذي يضيف مالك الملف الشخصي إلى جميع
المستخدمون التابعون
بخلاف مستخدم النظام الذي تم تعيين مالك الجهاز عليه.
في الأجهزة التي تم ضبطها من خلال مستخدم نظام بلا واجهة مستخدم رسومية (حيث يمكن لمستخدم النظام
يعمل في الخلفية)، فقط سياسات الأجهزة العامة في النطاق.
(السياسات المطبَّقة على جميع المستخدمين) يتم تطبيقها على المستخدم الذي يعمل في المقدّمة
أو المستخدمين. عرض
addUserRestriction
لمزيد من التفاصيل.
قد تشير الشركات المصنّعة لأجهزة Android إلى الإرشادات على source.android.com.
نظرة عامة على واجهة برمجة التطبيقات لإدارة الأجهزة
في ما يلي أمثلة على أنواع التطبيقات التي قد تستخدم Device Administration API:
- برامج البريد الإلكتروني.
- تطبيقات الأمان التي تمسح البيانات عن بُعد.
- خدمات وتطبيقات إدارة الأجهزة
كيف تعمل هذه الميزة؟
استخدام واجهة برمجة التطبيقات لإدارة الجهاز لكتابة تطبيقات مشرف الجهاز التي بتثبيتها على أجهزتهم. يفرض تطبيق مشرف الجهاز البيانات المطلوبة . إليك آلية العمل:
- أحد مشرفي النظام يكتب تطبيق مشرف الجهاز الذي يفرض سياسات أمان الأجهزة البعيدة/المحلية. يمكن أن يتم تضمين هذه السياسات بشكل ثابت في أو التطبيق الذي يجلب السياسات من جهة خارجية ديناميكيًا الخادم.
- تم تثبيت التطبيق على حسابات المستخدمين الأجهزة. يفعل Android
حل إدارة حسابات تلقائية حاليًا. تتضمن بعض الطرق التي قد يتبعها مسؤول إدارة النظم
توزيع التطبيق على المستخدمين كما يلي:
- Google Play.
- جارٍ تفعيل التثبيت من متجر آخر.
- توزيع التطبيق من خلال وسائل أخرى، مثل البريد الإلكتروني أو المواقع الإلكترونية
- يطلب النظام من المستخدم تفعيل تطبيق مشرف الجهاز. الطريقة ويعتمد وقت حدوث ذلك على كيفية تنفيذ التطبيق.
- بعد تفعيل المستخدمين لتطبيق مشرف الجهاز، يخضعون لما يلي: وسياساتها. عادة ما يوفر الالتزام بهذه السياسات مزايا، مثل الوصول إلى الأنظمة والبيانات الحساسة.
إذا لم يفعّل المستخدمون تطبيق مشرف الجهاز، سيظل التطبيق في حالة غير نشط على الجهاز. لن يخضع المستخدمون لسياساته، ولن يحصلوا في المقابل على أي من مزايا التطبيق، ولن يتمكّنوا على سبيل المثال من مزامنة البيانات.
إذا لم يلتزم مستخدم بالسياسات (على سبيل المثال، إذا وضع المستخدم تنتهك كلمة المرور للإرشادات)، فالأمر يرجع إلى التطبيق كيفية التعامل مع هذا. ومع ذلك، سيؤدي هذا عادةً إلى عدم القدرة على مزامنة البيانات.
فإذا حاول أحد الأجهزة الاتصال بخادم يتطلب سياسات لا المتوافقة مع واجهة برمجة التطبيقات لإدارة الأجهزة، فلن يكون الاتصال السماح بها. لا تسمح واجهة برمجة التطبيقات لإدارة الجهاز حاليًا باستخدام توفير المتطلبات اللازمة. بمعنى آخر، إذا كان هناك جهاز (على سبيل المثال، جهاز قديم) لا تدعم جميع السياسات المذكورة، فلا توجد طريقة للسماح الجهاز للاتصال به.
إذا كان الجهاز يحتوي على عدة تطبيقات مشرف مفعّلة، تكون السياسة الأكثر صرامة هي الفرضية. لا تتوفّر طريقة لاستهداف مشرف معيّن. التطبيق.
لإلغاء تثبيت تطبيق حالي لمشرف الجهاز، على المستخدمين: إلغاء تسجيل التطبيق كمشرف.
السياسات
في بيئة مؤسسية، غالبًا ما يكون مطلوبًا من أجهزة الموظفين الالتزام بمجموعة صارمة من السياسات التي تحكم استخدام الجهاز. تشير رسالة الأشكال البيانية تدعم واجهة برمجة التطبيقات لإدارة الأجهزة السياسات الواردة في الجدول 1. يُرجى ملاحظة أنّ واجهة برمجة التطبيقات لإدارة الأجهزة (Device Administration API) تتيح حاليًا كلمات مرور الشاشة فقط. قفل:
السياسة | الوصف |
---|---|
تم تفعيل كلمة المرور | يتطلب ذلك أن تطلب الأجهزة رقم التعريف الشخصي أو كلمات المرور. |
الحد الأدنى لطول كلمة المرور | اضبط عدد الأحرف المطلوب لكلمة المرور. على سبيل المثال، يمكن أن تتطلب رقم تعريف شخصي (PIN) أو كلمات مرور تتكون من ستة أحرف على الأقل. |
يجب إدخال كلمة مرور أبجدية رقمية. | تتطلب أن تحتوي كلمات المرور على مزيج من الأحرف والأرقام. وقد تتضمن أحرفًا رمزية. |
يجب إدخال كلمة مرور معقدة | تتطلب أن تحتوي كلمات المرور على الأقل على حرف ورقم عددي ورمز خاص. تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف المطلوبة في كلمة المرور لجميع المشرفين أو لأحد المشرفين. تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأدنى لعدد الأحرف الصغيرة المطلوبة في كلمة المرور | الحد الأدنى لعدد الأحرف الصغيرة الأحرف المطلوبة في كلمة المرور لجميع المشرفين أو لأحد المشرفين. تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأدنى المطلوب لعدد الأحرف غير الأحرف في كلمة المرور | الحد الأدنى لعدد الأحرف غير الأحرف المطلوبة في كلمة المرور لجميع المشرفين أو لأحد المشرفين. تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأدنى للأرقام العددية المطلوبة في كلمة المرور | الحد الأدنى لعدد الأرقام العددية المطلوبة في كلمة المرور لجميع المشرفين أو لرقم محدد. تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأدنى لعدد الرموز المطلوبة في كلمة المرور | يشير ذلك المصطلح إلى الحد الأدنى لعدد الرموز المطلوبة في كلمة المرور لجميع المشرفين أو لرمز محدّد. تم طرح هذه الميزة في الإصدار Android 3.0. |
يجب إدخال الحد الأدنى لعدد الأحرف الكبيرة في كلمة المرور. | الحد الأدنى لعدد الأحرف الكبيرة المطلوبة في كلمة المرور لجميع المشرفين أو لكلمة مرور معينة. تم طرح هذه الميزة في الإصدار Android 3.0. |
انتهاء مهلة انتهاء صلاحية كلمة المرور | تاريخ انتهاء صلاحية كلمة المرور، ويتم التعبير عنه كدلتا بالمللي ثانية من وقت ضبط مشرف الجهاز لمهلة انتهاء الصلاحية. تم طرح هذه الميزة في الإصدار Android 3.0. |
القيود المفروضة على سجلّ كلمات المرور | تمنع هذه السياسة المستخدمين من إعادة استخدام آخر ن من كلمات المرور الفريدة.
تُستخدم هذه السياسة عادةً بالتزامن مع
setPasswordExpirationTimeout() ، الذي يفرض
تحديث المستخدمين لكلمات المرور بعد مرور مدة زمنية محددة.
تم طرح هذه الميزة في الإصدار Android 3.0. |
الحد الأقصى لمحاولات إدخال كلمة المرور | لتحديد عدد المرات التي يمكن للمستخدم إدخال كلمة مرور خاطئة فيها قبل يمسح الجهاز بياناته. تسمح واجهة برمجة التطبيقات لإدارة الجهاز للمشرفين أيضًا إعادة ضبط الجهاز على الإعدادات الافتراضية للمصنع عن بُعد. يؤدي ذلك إلى تأمين البيانات في حالة أو فقدان الجهاز أو سرقته. |
قفل الحد الأقصى لوقت عدم النشاط | لضبط طول الفترة الزمنية منذ آخر مرة لمس فيها المستخدم الشاشة أو ضغطت على زر قبل أن يقفل الجهاز الشاشة. عندما يحدث هذا، يفكر المستخدمون إلى إدخال رقم التعريف الشخصي أو كلمات المرور مرة أخرى قبل أن يتمكنوا من استخدام أجهزتهم الوصول إلى البيانات. ويمكن أن تتراوح القيمة بين دقيقة واحدة و60 دقيقة. |
طلب تشفير مساحة التخزين | تحدِّد هذه السياسة أنّه يجب تشفير منطقة التخزين إذا كان الجهاز يتيح ذلك. تم طرح هذه الميزة في الإصدار Android 3.0. |
إيقاف الكاميرا | تحدِّد هذه السياسة أنّه يجب إيقاف الكاميرا. لاحظ أن هذا لا يحتوي على تعطيل الحساب بشكل دائم. يمكن تفعيل الكاميرا أو إيقافها ديناميكيًا. بناءً على السياق والوقت وما إلى ذلك. تم طرح هذه الميزة في الإصدار 4.0 من نظام التشغيل Android. |
ميزات أخرى
بالإضافة إلى إتاحة السياسات المذكورة في الجدول أعلاه، يمكن لـ تتيح لك واجهة برمجة التطبيقات Administration API إجراء ما يلي:
- طلب ضبط كلمة مرور جديدة من المستخدم
- قفل الجهاز فورًا.
- امسح بيانات الجهاز (وهذا يعني إعادة الجهاز إلى الإعدادات الافتراضية للمصنع).
نموذج تطبيق
تعتمد الأمثلة المستخدمة في هذه الصفحة على Device Administration API.
التي يتم تضمينها في نماذج حزمة تطوير البرامج (SDK) (المتاحة من خلال
Android SDK Manager)، ويتوفّر على نظامك باسم
<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
يقدم نموذج التطبيق عرضًا توضيحيًا لميزات مشرف الجهاز. يقدم للمستخدمين مع واجهة مستخدم تتيح لهم تفعيل تطبيق مشرف الجهاز. مرة واحدة قد فعّلوا التطبيق، يمكنهم استخدام الأزرار في واجهة المستخدم لإجراء ما يلي:
- ضبط جودة كلمة المرور
- حدد متطلبات لكلمة مرور المستخدم، مثل الحد الأدنى لطولها، والحد الأدنى والأحرف الرقمية التي يجب أن يحتوي عليها، وهكذا.
- اضبط كلمة المرور. وإذا لم تتوافق كلمة المرور مع العلامة يعرض النظام خطأ.
- تحديد عدد محاولات الإخفاق في إدخال كلمة المرور التي يمكن أن تحدث قبل حجب بيانات الجهاز (أي تتم إعادته إلى إعدادات المصنع).
- يُرجى تحديد المدة التي تنتهي فيها صلاحية كلمة المرور من الآن.
- ضبط طول سجلّ كلمات المرور (يشير الطول إلى عدد كلمات المرور القديمة المخزَّنة في السجلّ). يمنع هذا الإجراء المستخدمين من إعادة استخدام إحدى آخر n من كلمات المرور التي استخدموها سابقًا.
- حدِّد أنّه يجب تشفير منطقة التخزين إذا كان الجهاز يتيح ذلك.
- يمكنك ضبط الحد الأقصى لوقت عدم النشاط التي يمكن أن تنقضي قبل استخدام الجهاز. الأقفال.
- يجب قفل الجهاز في الحال.
- امسح بيانات الجهاز (أي استعادة الإعدادات الأصلية).
- إيقاف الكاميرا
تطوير تطبيق لإدارة الأجهزة
يمكن لمشرفي النظام استخدام واجهة برمجة التطبيقات لإدارة الأجهزة لكتابة تطبيق تفرض تنفيذ سياسة أمان الأجهزة البعيدة أو المحلية. هذا القسم الخطوات المتبعة لإنشاء إدارة الأجهزة التطبيق.
إنشاء البيان
لاستخدام واجهة برمجة التطبيقات لإدارة الأجهزة، ما يلي:
- فئة فرعية من
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.تنفيذ التعليمة البرمجية
تتضمن واجهة برمجة التطبيقات لإدارة الأجهزة الفئات التالية:
DeviceAdminReceiver
- الفئة الأساسية لتنفيذ مكوِّن إدارة الأجهزة. يوفر هذا الفصل
راحة لتفسير إجراءات النية الأوّلية التي يرسلها
. يجب أن يتضمن تطبيق إدارة الأجهزة
الفئة الفرعية
DeviceAdminReceiver
. DevicePolicyManager
- فئة لإدارة السياسات المفروضة على أحد الأجهزة. معظم عملاء
يجب أن يكون هذا الصف قد نشر
DeviceAdminReceiver
الذي أنشأه المستخدم مفعّلة حاليًا. يديرDevicePolicyManager
سياسات حدثDeviceAdminReceiver
واحد أو أكثر DeviceAdminInfo
- يتم استخدام هذا الصف لتحديد البيانات الوصفية لأحد مكونات مشرف الجهاز.
تمثل هذه الفئات الأساس لتطبيق إدارة الأجهزة كامل الوظائف.
يصف باقي هذا القسم كيفية استخدام DeviceAdminReceiver
DevicePolicyManager
واجهات برمجة التطبيقات لكتابة تطبيق مشرف الجهاز.
التصنيف الفرعي لجهاز DeviceAdminRecipient
لإنشاء تطبيق مشرف الجهاز، يجب أن يكون لديك فئة فرعية
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-
في ما يلي الرمز الذي يتم تنفيذه عندما ينقر المستخدم على مربّع الاختيار تفعيل المشرف. ويؤثر هذا في تشغيل
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
واجهات برمجة التطبيقات لإعداد وتنفيذ
سياسة كلمة المرور للجهاز. في واجهة برمجة التطبيقات لإدارة الأجهزة، لا تنطبق كلمة المرور إلا على
قفل الشاشة. يصف هذا القسم المهام الشائعة المتعلقة بكلمة المرور.
ضبط كلمة مرور للجهاز
يعرض هذا الرمز واجهة مستخدم تطلب من المستخدم ضبط كلمة مرور:
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);
تقييد كلمة المرور استنادًا إلى السجلّ
بدءًا من Android 3.0، يمكنك استخدام
setPasswordHistoryLength()
لتقييد تجربة
القدرة على إعادة استخدام كلمات المرور القديمة. تستغرق هذه الطريقة length
التي تحدد عدد الأعمدة القديمة
تخزين كلمات المرور. عند تفعيل هذه السياسة، لا يمكن للمستخدمين إدخال سياسة
كلمة المرور التي تتطابق مع آخر n من كلمات المرور. وهذا يمنع
منع المستخدمين من استخدام كلمة المرور نفسها مرارًا وتكرارًا تُستخدم هذه السياسة عادةً
بالتزامن مع
setPasswordExpirationTimeout()
,
وهو الأمر الذي يجبر المستخدمين
لتعديل كلمات مرورهم بعد مرور مدة زمنية محددة.
على سبيل المثال، يمنع هذا المقتطف المستخدمين من إعادة استخدام أي من آخر 5 كلمات مرور:
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.
إيقاف الكاميرا
بدءًا من نظام التشغيل 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)
Java
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)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
راجِع نموذج واجهة برمجة التطبيقات لإدارة الجهاز للاطّلاع على مثال كامل حول كيفية تفعيل تشفير مساحة التخزين.
عيّنات تعليمات برمجية إضافية
أداة Android AppRestrictionSpendr وDeviceOwner لتوضيح استخدام واجهات برمجة التطبيقات التي تتناولها هذه الصفحة.