בדיוק כמו בטלפון, כדי לגשת לחומרה רגישה כמו המצלמה והמיקרופון במשקפי AI, צריך לקבל הסכמה מהמשתמש. ההרשאות האלה נחשבות להרשאות ספציפיות למשקפיים, והאפליקציה צריכה לבקש אותן בזמן הריצה, גם אם כבר יש לה את ההרשאות התואמות בטלפון.
הצהרה על ההרשאות במניפסט של האפליקציה
לפני שמבקשים הרשאות, צריך להצהיר עליהן בקובץ המניפסט של האפליקציה באמצעות האלמנט <uses-permission>. ההצהרה הזו נשארת זהה בין אם ההרשאה היא לתכונה ספציפית בטלפון או במשקפיים עם AI, אבל עדיין צריך לבקש אותה באופן מפורש עבור חומרה או פונקציונליות ספציפיות למשקפיים.
<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>
רישום של כלי ההרשאות
כדי לבקש הרשאות למשקפי AI, קודם משתמשים ב-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 מפעילה את תהליך בקשת ההרשאה מהמשתמש. - האפליקציה צריכה לטפל בצורה חלקה בתוצאות של אישור ודחייה בקריאה החוזרת של מרכז האפליקציות.
יצירת פונקציה לבדיקת הרשאות
בשלב הבא, תיצרו פונקציה שיכולה לבדוק אם המשתמש העניק הרשאות לאפליקציה.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
הוספת הלוגיקה של בקשת ההרשאה
לבסוף, יוצרים את הלוגיקה שמשתמשת בפונקציות האלה כדי לבדוק את ההרשאות ולבקש אותן בזמן הריצה.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
מידע חשוב על הקוד
- אם המשתמש כבר העניק לאפליקציה את ההרשאות הנדרשות, הפונקציה
initializeGlassesFeaturesנקראת כדי לאתחל את חוויית השימוש באפליקציה. הפונקציה הזו מוגדרת כחלק מהפעילות של האפליקציה במשקפיים עם AI.
הסבר על תהליך בקשת ההרשאה
כשמפעילים בקשת הרשאה באמצעות השיטה ProjectedPermissionsResultContract, המערכת מתחילה מסלול משתמש מתואם גם במשקפי ה-AI וגם בטלפון.
במהלך תהליך ההרשאות, אלה הפעולות שצפויות באפליקציה ובצד המשתמש:
במשקפי ה-AI: פעילות מופיעה במכשיר החזוי (המשקפיים), עם הוראה למשתמש להסתכל בטלפון כדי להמשיך.
בטלפון: במקביל, פעילות מופעלת במכשיר המארח (הטלפון). במסך הזה מוצג הנימוק שסיפקתם, והמשתמש יכול להמשיך או לבטל.
בטלפון: אם המשתמש מאשר את ההסבר, בטלפון תופיע תיבת דו-שיח של הרשאות מערכת Android שעברה שינוי. בתיבה יוסבר למשתמש שהוא מעניק את ההרשאה למכשיר משקפי AI (ולא לטלפון), והמשתמש יוכל לאשר או לדחות את ההרשאה באופן רשמי.
קבלת התוצאה: אחרי שהמשתמש בוחר את התשובה הסופית, הפעילויות בטלפון ובמשקפי ה-AI נסגרות. לאחר מכן, מתבצעת קריאה חוזרת (callback) אל
ActivityResultLauncherעם מפה שמכילה את הסטטוס של כל הרשאה שהתבקשה.