نظرة عامة على إدارة الجهاز

إيقاف مشرف الجهاز. بدءًا من الإصدار 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) تتيح حاليًا كلمات مرور الشاشة فقط. قفل:

الجدول 1. السياسات المتوافقة مع واجهة برمجة التطبيقات لإدارة الأجهزة

السياسة الوصف
تم تفعيل كلمة المرور يتطلب ذلك أن تطلب الأجهزة رقم التعريف الشخصي أو كلمات المرور.
الحد الأدنى لطول كلمة المرور اضبط عدد الأحرف المطلوب لكلمة المرور. على سبيل المثال، يمكن أن تتطلب رقم تعريف شخصي (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 من كلمات المرور التي استخدموها سابقًا.
  • حدِّد أنّه يجب تشفير منطقة التخزين إذا كان الجهاز يتيح ذلك.
  • يمكنك ضبط الحد الأقصى لوقت عدم النشاط التي يمكن أن تنقضي قبل استخدام الجهاز. الأقفال.
  • يجب قفل الجهاز في الحال.
  • امسح بيانات الجهاز (أي استعادة الإعدادات الأصلية).
  • إيقاف الكاميرا

الشكل 1. لقطة شاشة لعيّنة التطبيق

تطوير تطبيق لإدارة الأجهزة

يمكن لمشرفي النظام استخدام واجهة برمجة التطبيقات لإدارة الأجهزة لكتابة تطبيق تفرض تنفيذ سياسة أمان الأجهزة البعيدة أو المحلية. هذا القسم الخطوات المتبعة لإنشاء إدارة الأجهزة التطبيق.

إنشاء البيان

لاستخدام واجهة برمجة التطبيقات لإدارة الأجهزة، ما يلي:

  • فئة فرعية من DeviceAdminReceiver تشمل ما يلي:
  • يشير ذلك المصطلح إلى بيان لسياسات الأمان المستخدَمة في البيانات الوصفية.

في ما يلي مقتطف من نموذج بيان "إدارة الأجهزة":

<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-

الشكل 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 بأحرف كبيرة. فيما يلي طرق ضبط كلمة المرور المحتوى:

على سبيل المثال، ينص هذا المقتطف على أن كلمة المرور يجب أن تحتوي على حرفين كبيرين على الأقل:

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 لتوضيح استخدام واجهات برمجة التطبيقات التي تتناولها هذه الصفحة.