ফোনের মতোই, এআই গ্লাসের ক্যামেরা এবং মাইক্রোফোনের মতো সংবেদনশীল হার্ডওয়্যার অ্যাক্সেস করার জন্য ব্যবহারকারীর সুস্পষ্ট অনুমতির প্রয়োজন হয়। এগুলোকে গ্লাস-নির্দিষ্ট অনুমতি হিসেবে বিবেচনা করা হয়, এবং আপনার অ্যাপকে রানটাইমে এগুলোর জন্য অনুরোধ করতে হবে, এমনকি যদি ফোনে সংশ্লিষ্ট অনুমতিগুলো আগে থেকেই তার কাছে থাকে।
আপনার অ্যাপের ম্যানিফেস্টে অনুমতিগুলো ঘোষণা করুন।
অনুমতির জন্য অনুরোধ করার আগে, আপনাকে অবশ্যই আপনার অ্যাপের ম্যানিফেস্ট ফাইলে <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) ব্যবহার করা উচিত, যেখানে ProjectedContext.createProjectedDeviceContext কল করে প্রাপ্ত Context এর getDeviceId মেথডটি কল করার মাধ্যমে deviceId পাওয়া যায়।
অনুমতি প্রদান প্রক্রিয়া চলাকালীন, আপনার অ্যাপ এবং ব্যবহারকারী যা প্রত্যাশা করতে পারেন তা নিচে দেওয়া হলো:
এআই চশমায় : প্রজেক্টেড ডিভাইসটিতে (চশমায়) একটি কার্যকলাপ প্রদর্শিত হয়, যা ব্যবহারকারীকে চালিয়ে যাওয়ার জন্য তার ফোনের দিকে তাকাতে নির্দেশ দেয়।
tts?.speak("Please review the permission request on your host device", TextToSpeech.QUEUE_ADD, null, "permission_request")ফোনে : একই সাথে, হোস্ট ডিভাইসে (ফোনে) একটি কার্যক্রম চালু হয়। এই স্ক্রিনে আপনার দেওয়া কারণ দর্শানোর স্ট্রিংটি প্রদর্শিত হয় এবং ব্যবহারকারীকে এগিয়ে যাওয়ার বা বাতিল করার বিকল্প দেওয়া হয়।
ফোনে : যদি ব্যবহারকারী কারণটি গ্রহণ করেন, তাহলে ফোনে একটি পরিবর্তিত অ্যান্ড্রয়েড সিস্টেম পারমিশন ডায়ালগ বক্স প্রদর্শিত হয়, যা ব্যবহারকারীকে জানায় যে তিনি এআই গ্লাস ডিভাইসটির জন্য অনুমতি দিচ্ছেন (ফোনের জন্য নয়), এবং ব্যবহারকারী আনুষ্ঠানিকভাবে অনুমতিটি মঞ্জুর বা প্রত্যাখ্যান করতে পারেন।
ফলাফল গ্রহণ : ব্যবহারকারী তার চূড়ান্ত পছন্দ করার পর, ফোন এবং এআই গ্লাস উভয়ের কার্যকলাপ বন্ধ করে দেওয়া হয়। এরপর আপনার
ActivityResultLauncherকলব্যাকটি প্রতিটি অনুরোধ করা অনুমতির মঞ্জুরকৃত অবস্থা সম্বলিত একটি ম্যাপ সহ আহ্বান করা হয়।