درست مانند تلفن، دسترسی به سختافزارهای حساس مانند دوربین و میکروفون در عینکهای هوش مصنوعی نیاز به رضایت صریح کاربر دارد. اینها مجوزهای مخصوص عینک محسوب میشوند و برنامه شما باید در زمان اجرا آنها را درخواست کند، حتی اگر از قبل مجوزهای مربوطه را در تلفن داشته باشد.
مجوزها را در مانیفست برنامه خود اعلام کنید
قبل از درخواست مجوزها، باید آنها را در فایل مانیفست برنامه خود با استفاده از عنصر <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 به همراه متد 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 } }
نکات کلیدی در مورد کد
- این کد با استفاده از متد
ProjectedPermissionsResultContractیکActivityResultLauncherایجاد میکند. تابع فراخوانی، نگاشتی از نامهای مجوزها را به وضعیتهای اعطا شدهشان دریافت میکند. - شما باید مشخص کنید که برنامه شما به چه مجوزهایی نیاز دارد، مانند
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در لانچر ، جریان درخواست مجوز کاربر را فعال میکند. - برنامهی شما باید نتایج اعطا شده و رد شده را به خوبی در فراخوانی لانچر مدیریت کند.
تابع بررسی مجوزها را ایجاد کنید
در مرحله بعد، تابعی ایجاد خواهید کرد که میتواند بررسی کند آیا کاربر به برنامه شما مجوز داده است یا خیر.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
منطق درخواست مجوز را اضافه کنید
و در آخر، منطقی ایجاد کنید که از این توابع برای بررسی و درخواست مجوزها در زمان اجرا استفاده کند.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
نکات کلیدی در مورد کد
- اگر کاربر قبلاً مجوزهای لازم را به برنامه شما اعطا کرده باشد، تابع
initializeGlassesFeaturesبرای مقداردهی اولیه تجربه برنامه شما فراخوانی میشود. این تابع به عنوان بخشی از فعالیت برنامه شما برای عینکهای هوش مصنوعی تعریف شده است.
جریان درخواست مجوز کاربر را درک کنید
وقتی با استفاده از متد ProjectedPermissionsResultContract درخواست مجوزی را ارسال میکنید، سیستم یک جریان کاربری هماهنگ را در عینک هوش مصنوعی و گوشی آغاز میکند.
اگر برنامه شما از قبل یک Activity نمایش داده شده روی گوشی دارد، باید از Activity#requestPermissions(permissions, requestCode, deviceId) استفاده کنید، که در آن deviceId از فراخوانی متد getDeviceId روی Context که با فراخوانی ProjectedContext.createProjectedDeviceContext برگردانده میشود، میآید.
در طول جریان دسترسیهای کاربر، آنچه برنامه شما و کاربر میتوانند انتظار داشته باشند، به شرح زیر است:
روی عینک هوش مصنوعی : فعالیتی روی دستگاه نمایش داده شده (عینک) ظاهر میشود و به کاربر دستور میدهد برای ادامه به تلفن خود نگاه کند.
tts?.speak("Please review the permission request on your host device", TextToSpeech.QUEUE_ADD, null, "permission_request")روی گوشی : همزمان، یک فعالیت روی دستگاه میزبان (گوشی) اجرا میشود. این صفحه رشتهی منطقی که شما ارائه کردهاید را نمایش میدهد و به کاربر امکان ادامه یا لغو را میدهد.
در تلفن : اگر کاربر منطق را بپذیرد، یک پنجرهی مجوز سیستم اندروید اصلاحشده روی تلفن ظاهر میشود که به کاربر میگوید مجوز را برای دستگاه عینک هوش مصنوعی (نه تلفن) اعطا میکند و کاربر میتواند رسماً مجوز را اعطا یا رد کند.
دریافت نتیجه : پس از اینکه کاربر انتخاب نهایی خود را انجام داد، فعالیتهای روی گوشی و عینک هوش مصنوعی رد میشوند. سپس تابع فراخوانی
ActivityResultLauncherشما با نقشهای حاوی وضعیت اعطا شده برای هر مجوز درخواستی فراخوانی میشود.