הוצאה משימוש של מנהל המכשיר. החל מ-Android 9 (רמת API 28), חלק מכללי המדיניות של האדמין יסומנו כהוצאה משימוש כאשר הופעל על ידי אדמין המכשיר. מומלץ להתחיל להתכונן לקראת השינוי הזה כבר עכשיו. למידה מידע נוסף על אפשרויות ההעברה, הוצאה משימוש של מנהל המכשיר.
מערכת Android כוללת תמיכה באפליקציות עסקיות, כי היא כוללת ממשק API לניהול מכשירי Android. Device Administration API מספק את המכשיר ברמת המערכת. ממשקי ה-API האלה מאפשרים לכם אפליקציות מבוססות-אבטחה שהשימוש בהן הוא שימושי בהגדרות הארגון, שבהן IT לאנשי המקצוע נדרש שליטה רבה במכשירים של העובדים. לדוגמה, אפליקציית האימייל המובנית ל-Android נעזרת בממשקי ה-API האלה כדי לשפר את תמיכה ב-Exchange. באמצעות אפליקציית האימייל, אדמינים ב-Exchange יכולים לאכוף מדיניות סיסמאות — כולל סיסמאות אלפאנומריות או מספריות קודי אימות – בכל המכשירים. מנהלי מערכת יכולים גם לבצע מחיקה מרחוק (כלומר, שחזור הגדרות ברירת המחדל של היצרן) מכשירים שאבדו או נגנבו. משתמשי Exchange יכולים לסנכרן את נתוני האימייל והיומן שלהם.
המסמך הזה מיועד למפתחים שרוצים לפתח אפליקציות ולמכשירים מבוססי Android. נסביר על התכונות השונות שסופקו על ידי Device Administration API כדי לספק אבטחה חזקה יותר מכשירים שעובדים באמצעות Android.
הערה למידע נוסף על יצירת מדיניות לעבודה בקר לפריסות של Android for Work: פיתוח בקר לניהול מדיניות מכשירים
מצב בעלים של מכשיר ללא GUI
ב-Android 14 (רמת API 34) נוסף מצב משתמש במערכת ללא ממשק גרפי (GUI) (מכשירים ב-
איזה
UserManager.isHeadlessSystemUserMode
מחזירה true
). במצב משתמש במערכת ללא ממשק גרפי, משתמש המערכת
משתמש ברקע, מסתמכת על משתמשים נוספים שפועלים בחזית עבור משתמשי הקצה
אינטראקציה חוזרת. Android 14 כולל גם
מצב שיוך לבעלי מכשיר ללא GUI,
פעולה שמוסיפה בעלי פרופיל לכל
משתמשים משויכים
מלבד משתמש המערכת שבו מוגדר בעלי המכשיר.
במכשירים שהוגדרו עם משתמש במערכת ללא GUI (שבו משתמש המערכת
פועלת ברקע), רק כללי מדיניות המכשיר שהוגדרו באופן גלובלי
(כללי המדיניות שחלים על כל המשתמשים) חלים על המשתמש שפועל בחזית
או משתמשים. צפייה
addUserRestriction
לקבלת פרטים.
יצרנים של מכשירי Android עשויים לעיין הנחיות פורסם בכתובת source.android.com.
סקירה כללית על Device Manage API
הנה דוגמאות לסוגי האפליקציות שעשויות להשתמש ב-Device Administration API:
- תוכנות אימייל.
- אפליקציות אבטחה עם מחיקה מרחוק.
- אפליקציות ושירותים לניהול מכשירים.
איך זה עובד?
משתמשים ב-Device Administration API כדי לכתוב אפליקציות לניהול מכשירים שהמשתמשים משתמשים בהן להתקין במכשירים שלהם. אפליקציית ניהול המכשיר אוכפת את . כך זה עובד:
- אדמין כותב אפליקציה לניהול המכשיר שאוכפת כללי מדיניות לאבטחת מכשיר מרוחק/מקומי. ניתן לקודד את כללי המדיניות האלה בתוך הקוד האפליקציה, או האפליקציה יכולה לאחזר באופן דינמי כללי מדיניות מצד שלישי השרת.
- האפליקציה מותקנת במכשירים של המשתמשים מכשירים. ב-Android
אין להם כרגע פתרון להקצאת הרשאות ידנית. חלק מהדרכים שבהן מנהל מערכת עשוי
הפצת האפליקציה למשתמשים:
- Google Play.
- מפעיל התקנה מחנות אחרת.
- הפצת האפליקציה באמצעים אחרים, כמו אימייל או אתרים.
- המערכת מבקשת מהמשתמש להפעיל את אפליקציית ניהול המכשיר. איך ומתי זה קורה תלוי באופן ההטמעה של האפליקציה.
- כשמשתמשים יפעילו את אפליקציית ניהול המכשיר, הם יהיו כפופים למדיניות שלה. ציות לכללי המדיניות האלה בדרך כלל מעניק יתרונות, כמו גישה למערכות ולנתונים רגישים.
אם המשתמשים לא יפעילו את אפליקציית ניהול המכשיר, היא תישאר במכשיר אך במצב לא פעיל. המשתמשים לא יהיו כפופים למדיניות שלה, ולהפך, הם לא יקבלו אף אחד מההטבות של האפליקציה – לדוגמה, יכול להיות שהם לא יוכלו לסנכרן נתונים.
אם משתמש לא פועל בהתאם למדיניות (לדוגמה, אם משתמש הגדיר סיסמה שמפרה את ההנחיות), האפליקציה מחליטה איך לטפל בזה. עם זאת, בדרך כלל כתוצאה מכך המשתמש לא ניתן לסנכרן נתונים.
אם מכשיר מנסה להתחבר לשרת שלא דורש מדיניות נתמך ב-Device Administration API, החיבור לא מותרת. נכון לעכשיו, Device Administration API לא מאפשר שימוש חלקי הקצאה. במילים אחרות, אם מכשיר (למשל, מכשיר מדור קודם) אינם תומכים בכל כללי המדיניות שצוינו, אין דרך לאפשר של המכשיר לחיבור.
אם במכשיר יש כמה אפליקציות אדמין מופעלות, המדיניות המחמירה ביותר היא אכיפה. אין דרך לטרגט אדמין מסוים אפליקציה.
כדי להסיר אפליקציית ניהול מכשיר קיימת, המשתמשים צריכים לבטל את הרישום של האפליקציה כאדמין.
מדיניות
בסביבה ארגונית, לרוב קורה שמכשירים של עובדים צריכים לפעול בהתאם לקבוצה מחמירה של כללי מדיניות שחלים על השימוש במכשיר. Device Administration API תומך בכללי המדיניות שמפורטים בטבלה 1. לתשומת ליבך: נכון לעכשיו, Device Administration API תומך בסיסמאות במסך בלבד lock:
מדיניות | תיאור |
---|---|
הסיסמה הופעלה | נדרשת בקשה להצגת קוד אימות או סיסמה במכשירים. |
אורך סיסמה מינימלי | מגדירים את מספר התווים הנדרש לסיסמה. לדוגמה, יכול לדרוש שה-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. |
הגבלה של היסטוריית הסיסמאות | המדיניות הזו מונעת ממשתמשים לעשות שימוש חוזר ב-n הסיסמאות הייחודיות האחרונות.
בדרך כלל משתמשים במדיניות הזו בשילוב עם
setPasswordExpirationTimeout() , שמכריח
משתמשים יעדכנו את הסיסמאות שלהם לאחר שיעבור פרק זמן מסוים.
התכונה הושקה ב-Android 3.0. |
מספר ניסיונות כושלים להזנת סיסמה | מציין כמה פעמים משתמש יכול להזין סיסמה שגויה לפני במכשיר עצמו. Device Administration API גם מאפשר למנהלי המערכת לאפס מרחוק את המכשיר להגדרות ברירת המחדל של היצרן. פעולה זו מאבטחת נתונים במקרה אם המכשיר אבד או נגנב. |
נעילה של פרק הזמן המקסימלי של חוסר פעילות | הגדרה של משך הזמן שעבר מאז שהמשתמש נגע במסך בפעם האחרונה לחצת על לחצן לפני שהמכשיר ננעל את המסך. במצב כזה, המשתמשים יצטרכו להזין שוב את קוד האימות או את הסיסמאות לפני שיוכלו להשתמש במכשירים גישה לנתונים. הערך יכול להיות בין דקה ל-60 דקות. |
דרישה להצפנת אחסון | מציינת שאזור האחסון צריך להיות מוצפן, אם המכשיר תומך בכך. התכונה הושקה ב-Android 3.0. |
השבתת המצלמה | מציינת שהמצלמה צריכה להיות מושבתת. לתשומת ליבכם: תהיה השבתה סופית. ניתן להפעיל/להשבית את המצלמה באופן דינמי בהתאם להקשר, לזמן וכן הלאה. התכונה הושקה ב-Android 4.0. |
תכונות אחרות
בנוסף לתמיכה בכללי המדיניות שמפורטים בטבלה שלמעלה, בעזרת ממשק ה-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
Intent, מבוטאת במניפסט כמסנן Intent.
- ההרשאה
- הצהרה של מדיניות האבטחה שנעשה בה שימוש במטא-נתונים.
הנה קטע מתוך המניפסט לדוגמה של ניהול המכשיר:
<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
- סיווג הבסיס להטמעת רכיב ניהול מכשירים. הכיתה הזו מספקת
נוחיות לפירוש של פעולות ה-Intent הגולמיות שנשלחות על ידי
המערכת. האפליקציה לניהול המכשיר חייבת לכלול
מחלקה משנית אחת (
DeviceAdminReceiver
). DevicePolicyManager
- סיווג לניהול כללי מדיניות שנאכפים על מכשיר. רוב הלקוחות של
הקורס הזה חייב לפרסם
DeviceAdminReceiver
שהמשתמש פעיל כרגע.DevicePolicyManager
מנהלת את המדיניות עבור אירועDeviceAdminReceiver
אחד או יותר DeviceAdminInfo
- המחלקה הזו משמשת לציון מטא-נתונים לרכיב של מנהל המכשיר.
השיעורים האלה מספקים את הבסיס לאפליקציה לניהול מכשירים שפועלת באופן מלא.
שאר הסעיף הזה מתאר את אופן השימוש שלך בDeviceAdminReceiver
ממשקי API של DevicePolicyManager
לכתיבת אפליקציה לניהול מכשירים.
סיווג משנה של DeviceAdminReceiver
כדי ליצור אפליקציית ניהול מכשירים, צריך לתת מחלקה משנית
DeviceAdminReceiver
הכיתה DeviceAdminReceiver
מורכב מסדרה של קריאות חוזרות (callback) שמופעלות כשאירועים מסוימים
יתרחשו.
במחלקה המשנית שלה 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()
קריאה חוזרת. הקריאה החוזרת (callback) הזו מופעלת כאשר המשתמש משנה את הערך של 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
כולל ממשקי API להגדרה ולאכיפה של
המדיניות בנושא סיסמאות של מכשירים. ב-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()
לדוגמה, קטע הקוד הזה מציין שהסיסמה צריכה לכלול לפחות 2 אותיות רישיות:
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);
דוגמה מלאה להפעלה של הצפנת אחסון זמינה בדוגמה של Device Administration API.
דוגמאות קוד נוספות
הכלי Android AppRestrictionEnforcer ובעלי המכשיר דוגמאות נוספות ממחישות את השימוש בממשקי ה-API שמפורטים בדף הזה.