בדיוק כמו בטלפון, כדי לגשת לחומרה רגישה כמו המצלמה והמיקרופון במשקפי שמע ובמשקפיים עם תצוגה, נדרשת הסכמה מהמשתמש. ההרשאות האלה נחשבות להרשאות ספציפיות למשקפיים, והאפליקציה צריכה לבקש אותן בזמן הריצה, גם אם כבר יש לה את ההרשאות התואמות בטלפון.
הצהרה על ההרשאות במניפסט של האפליקציה
לפני שמבקשים הרשאות, צריך להצהיר עליהן בקובץ המניפסט של האפליקציה באמצעות האלמנט <uses-permission>. ההצהרה הזו נשארת זהה בין אם ההרשאה היא לתכונה ספציפית לטלפון או למשקפיים, אבל עדיין צריך לבקש אותה במפורש עבור חומרה או פונקציונליות ספציפיות למשקפיים.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for the camera. -->
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
רישום של כלי ההרשאות
כדי לבקש הרשאות למשקפי שמע ולמשקפי תצוגה, קודם משתמשים ב-ActivityResultLauncher עם ה-method ProjectedPermissionsResultContract כדי לרשום את מרכז ההרשאות.
// Register the permissions launcher using the ProjectedPermissionsResultContract. private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> = registerForActivityResult(ProjectedPermissionsResultContract()) { results -> if (results[Manifest.permission.CAMERA] == true) { isPermissionDenied = false initializeGlassesFeatures() } else { // Handle permission denial. isPermissionDenied = true } }
מידע חשוב על הקוד
- הקוד יוצר
ActivityResultLauncherבאמצעות ה-methodProjectedPermissionsResultContract. הקריאה החוזרת מקבלת מפה של שמות ההרשאות והסטטוס שלהן. - צריך לציין אילו הרשאות נדרשות לאפליקציה, כמו
Manifest.permission.CAMERAאוManifest.permission.RECORD_AUDIO.
יצירת פונקציית הבקשה
בשלב הבא, תיצרו פונקציה שמשתמשת בכלי להפעלת ההרשאות של האפליקציה כדי לבקש מהמשתמש את ההרשאות בזמן הריצה.
private fun requestHardwarePermissions() { val params = ProjectedPermissionsRequestParams( permissions = listOf(Manifest.permission.CAMERA), rationale = "Camera access is required to overlay digital content on your physical environment." ) requestPermissionLauncher.launch(listOf(params)) }
מידע חשוב על הקוד
- הפונקציה
requestHardwarePermissionsיוצרת אובייקטProjectedPermissionsRequestParams. האובייקט הזה כולל את רשימת ההרשאות שהאפליקציה צריכה ואת ההסבר שמוצג למשתמשים. חשוב להסביר בצורה ברורה ותמציתית למה האפליקציה צריכה את ההרשאות האלה. - התקשרות אל
launchב-Launcher מפעילה את תהליך בקשת ההרשאה מהמשתמש. - האפליקציה צריכה לטפל בתוצאות של אישור ודחייה בצורה חלקה בקריאה החוזרת של ה-Launcher.
יצירת פונקציה לבדיקת הרשאות
בשלב הבא, תיצרו פונקציה שיכולה לבדוק אם המשתמש העניק הרשאות לאפליקציה.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
הוספת הלוגיקה של בקשת ההרשאה
לבסוף, יוצרים את הלוגיקה שמשתמשת בפונקציות האלה כדי לבדוק את ההרשאות ולבקש אותן בזמן הריצה.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
מידע חשוב על הקוד
- אם המשתמש כבר העניק לאפליקציה את ההרשאות הנדרשות, הפונקציה
initializeGlassesFeaturesנקראת כדי לאתחל את חוויית השימוש באפליקציה. הפונקציה הזו מוגדרת כחלק מהפעילות של האפליקציה במשקפיים עם AI.
הסבר על תהליך בקשת ההרשאה
כשמפעילים בקשת הרשאה באמצעות ה-method ProjectedPermissionsResultContract, המערכת מתחילה תהליך מתואם למשתמש גם במשקפיים וגם בטלפון.
במהלך תהליך ההרשאות, האפליקציה והמשתמש יכולים לצפות לדברים הבאים:
במשקפיים: פעילות מופיעה במכשיר החזוי (המשקפיים), עם הוראה למשתמש להסתכל בטלפון כדי להמשיך.
בטלפון: במקביל, פעילות מופעלת במכשיר המארח (הטלפון). במסך הזה מוצג הנימוק שסיפקתם, והמשתמש יכול להמשיך או לבטל.
בטלפון: אם המשתמש מאשר את ההסבר, בטלפון מופיעה תיבת דו-שיח שונה של הרשאת מערכת Android, שבה נאמר למשתמש שהוא מעניק את ההרשאה למשקפיים (ולא לטלפון), והמשתמש יכול לאשר או לדחות את ההרשאה באופן רשמי.
קבלת התוצאה: אחרי שהמשתמש בוחר את האפשרות הסופית, הפעילויות בטלפון ובמשקפיים נסגרות. לאחר מכן, מתבצעת קריאה חוזרת (callback) אל
ActivityResultLauncherעם מפה שמכילה את הסטטוס של כל הרשאה שהתבקשה.