এন্ড্রয়েড পার্মিশন

এন্ড্রয়েড ইউজারদের ললিপপ খাওয়ানোর পাশাপাশি তাদের নিরপত্তার বিষয়টি নিশ্চিত করতে ললিপপ ভার্সন থেকে রান টাইম পার্মিশন নামক একটি অদ্ভুত বস্তু গুগল তাদের খাতায় যোগ করেছে । যেখানে, কোনো এপ ডেভেলোপার যদি তার এপ ইউজারের Storage, Camera, Contacts, Locationঅথবা Microphone সহ অন্যান্য যেকোনো গুরুত্বপূর্ণ এরিয়াতে হাত দিতে চাইলে অবশ্যই ইউজার কতৃক পারমিশন নিয়ে তারপরেই হাতা হাতি করতে হবে । আমার মনে হয় গুগল বাংলাদেশের কথা ভেবেই এই বস্তুটি তাদের খাতায় যুক্ত করেছেন । কারণ, আমরা (৯০% মানুষ) আল্লাহর ওয়াস্তে আমাদের এপ কি কি পার্মিশন নিচ্ছে অথবা Terms & Condition এ কি লেখা আছে সেট না পড়েই সব কিছু তে Allow করে দেই (আমিও এর ব্যাতিক্রম নই 🤓 )। যেটা অনেকটা ঝুকিপূর্ণ, কারণ আমাদের কিছু ভাই রয়েছে (হ্যাকার) যারা RAT বা ট্রজান হর্স দিয়ে খুব সুন্দর করে ভিকটিমের ডেটা নিজের মনে করে চুরি করে নিতে পারে । তা আমি সে বিষয়ে কিছু না বলে আমরা এখানে দেখবো কিভাবে আমরা রানটাইম ইউজারের কাছে পার্মিশন নিতে পারবো । 😁
আগের ভার্সন গুলোর মতই আমাদের আগেই AndroidManifest.xml এ পার্মিশন গুলো উল্লেখ করে নিতে হবে

এর পর আসবে মেইন কাহীনি, আমরা এখন জাভাতে গিয়ে গুতাগুতি করবো কিছু। আমরা ঠিক যেখানে ইউজারের কাছে পার্মিশন নিবো সেই একটিভিটে তে আমরা কোড গুলো লিখবো। তবে একেকজন একেক ভাবে পার্মিশন নেয় । তাই সবার টা কিছুটা ব্যতিক্রম হতে পারে।
String[] appPermissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
আমরা এখানে একটি স্ট্রিং টাইপের Array ডিক্লিয়ার (appPermissions) করলাম যেখানে আমরা কি কি পার্মিশন চাই চেটা উল্লেখ করলাম।
এর সাথে আমরা একটি Request Code এর জন্যে int টাইপের একটা ভ্যারিয়াবল(PERMISSION_CODE) নিবো
int PERMISSION_CODE = 1;
এখনা আমরা লুপ চালায় Array তে কি কি পার্মিশন নেয়ার আশা করছিলাম ওগুলো চেক করবো যে পার্মিশন গুলা কি Approve হয়েছে কি না । যদি না হয় তবে আমরা সেই পার্মিশন গুলোর নাম একটি একটি করে স্ট্রিং টাইপের লিস্টে (listPermission) এড করবো ।

এর পর আমরা চেক করবো যে লিস্ট টা ফাকা নাকি কোনো কিছু আছে। যদি লিস্ট ফাকা না হয় তবে আমরা লিস্টকে Array কে কনভার্ট করে ইউজারের কাছে পার্মিশনের জন্যে আবদার করবো

এখনা আমরা অনেক অনেক important একটা কাজ করবো। যেই কাজটা না করলে দুনিয়া উলটে যাবে । সে টা হলো এই কোড টুকু একটা মেথডের ভিত্রে নিবো 🤣😂
public boolean checkandRequestPermission() {
List<String> listPermission = new ArrayList<>();
for (String perm : appPermissions) {
if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
listPermission.add(perm);
}
}
//Ask If Non Granted Permission
if (!listPermission.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermission.toArray(new String[listPermission.size()]), PERMISSION_CODE);
return false;
}
return true;
}
এখন এই মেথড টা আমরা যেখানে কল করবো সেখানে আমাদের রানটাইম পার্মিশন নিবে । এক্ষেত্রে আমরা লিস্ট আকারে পার্মিশন নেয়ার কারনে ইউজার যদি একটু হারামী টাইপের হয়, যেমন Storage Write পার্মিশন Approve করলো কিন্তু ইতরামী কইরা Storage Read পার্মিশন দিলো না তবে পরবর্তীতে যখন মেথটা আবার কল করবে তখন আবার Storage Read পার্মিশনের জন্যে আবার গুতা গুতি করবে ।
সো, এই ছিলো ললিপপ চুষতে চুষতে কিভাবে রানটাইম পার্মিশন নিতে হয় তার টিউটরিয়াল । 😎