Android এ Normal Permission — এটি কী, সুরক্ষা লেভেল এবং কাজকারী পদ্ধতি

লেখক: IT Sectr প্রকাশিত: 2026-05-20 পড়ার সময়: 8 মিনিট

Normal Permission হল Android এ অনুমতির একটি শ্রেণী যা সিস্টেম ব্যবহারকারীকে জিজ্ঞেস করা ছাড়াই স্বচালিতভাবে প্রদান করে। Android Developer Documentation, 2024 অনুযায়ী, সাধারণ অনুমতিগুলির ProtectionLevel normal থাকে এবং বিপদজনকগুলির মতো রানটাইম ডায়ালগ প্রয়োজন হয় না। এগুলি ইন্টারনেট, নেটওয়ার্ক অবস্থা এবং কম্পন অ্যাক্সেস অন্তর্ভুক্ত করে, যা ব্যবহারকারীর সংবেদনশীল ডেটার জন্য কোন ঝুঁকি তৈরি করে না।

মূল বিষয়

  • Normal Permission হল ProtectionLevel normal সহ Android অনুমতির একটি শ্রেণী, যা ইনস্টলেশনের সময় স্বচালিতভাবে প্রদান করা হয়।
  • এটি ব্যবহার করতে শুধু মেনিফেস্টে uses-permission যোগ করা যথেষ্ট — ব্যবহারকারীকে কোন ডায়ালগ দেখানো হয় না।
  • বিপদজনকগুলির থেকে মূল পার্থক্য হল রানটাইম অনুরোধের অনুপস্থিতি এবং সেটিংসের মাধ্যমে প্রত্যাহার করার অক্ষমতা।
  • তালিকায় INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE এবং অন্যান্য সিস্টেম কনস্টেন্ট অন্তর্ভুক্ত রয়েছে।
  • আপনি অ্যাপ্লিকেশন কোডে PackageManager.getPermissionInfo এর মাধ্যমে সুরক্ষা লেভেল পরীক্ষা করতে পারেন।

Android এ Normal Permission কী

Normal Permission হল Android এ ProtectionLevel normal সহ একটি সিস্টেম অনুমতির ধরন, যা ইনস্টলেশনের সময় অ্যাপ্লিকেশনকে স্বচালিতভাবে প্রদান করা হয়। ডেভেলপারকে এটি অনুরোধ করার জন্য কোড লিখতে হবে না — শুধু AndroidManifest.xml এ অনুমতি ঘোষণা করলেই হবে। ব্যবহারকারী কোন ডায়ালগ দেখে না এবং সে পৃথকভাবে একটি সাধারণ অনুমতি প্রত্যাহার করতে পারে না, শুধু পুরো অ্যাপ্লিকেশন আনইনস্টল করে।

Android সিস্টেম সাধারণ অনুমতিগুলিকে নিম্ন-ঝুঁকি বলে শ্রেণীবদ্ধ করে — এগুলি ব্যক্তিগত ডেটা, ক্যামেরা বা মাইক্রোফোনে অ্যাক্সেস প্রদান করে না। সাধারণ উদাহরণ: ইন্টারনেট অ্যাক্সেস, কম্পন নিয়ন্ত্রণ, Wi-Fi অবস্থা পড়া। Android Security Model (2024) অনুযায়ী, প্রায় 40 শতাংশ সিস্টেম অনুমতি সাধারণ শ্রেণীর অন্তর্ভুক্ত।

একটি গুরুত্বপূর্ণ বৈশিষ্ট্য — সাধারণ অনুমতিগুলি সেটিংসের মাধ্যমে রানটাইমে প্রত্যাহার করা যায় না। যদি ব্যবহারকারী অ্যাক্সেস অস্বীকার করতে চায়, তাহলে একমাত্র উপায় হল অ্যাপ্লিকেশন আনইনস্টল করা। ডেভেলপারদের আর্কিটেকচারে এটি মনে রাখা উচিত, কিন্তু ব্যবহারকারীদের জন্য এই পদ্ধতি মিথস্থাপনকে সহজ করে: প্রথম লঞ্চে কোন ডায়ালগ নেই।

শ্রেণীর ইতিহাস

সাধারণ এবং বিপদজনক অনুমতিতে বিভাজন Android 6.0 Marshmallow (API 23) এ আবির্ভূত হয়েছিল। এই সংস্করণের আগে, সকল অনুমতি ইনস্টলেশনে অনুরোধ করা হত — ব্যবহারকারী একটি একক তালিকা দেখত এবং সম্পূর্ণ হিসাবে স্বীকার বা প্রত্যাখ্যান করত। Normal Permission নিম্ন-ঝুঁকি কাজের জন্য এই মডেলটি বজায় রেখেছে, যখন Dangerous রানটাইম অনুরোধে সুইচ করেছে। এই পরিবর্তন ব্যবহারকারী অভিব্যক্তিকে উন্নত করেছে এবং পাশাপাশি নিরাপত্তা বৃদ্ধি করেছে।

কোন কোন APIর Normal Permission প্রয়োজন

অনেক Android সিস্টেম APIর জন্য একটি সাধারণ অনুমতির স্পষ্ট ঘোষণা প্রয়োজন, যদিও অ্যাক্সেস স্বচালিত। উদাহরণস্বরূপ, ConnectivityManager ক্লাসটির ACCESS_NETWORK_STATE প্রয়োজন, VibratorServiceএর VIBRATE প্রয়োজন, WifiManagerএর ACCESS_WIFI_STATE প্রয়োজন। অনুরূপ uses-permission ঘোষণা ছাড়া, এই APIগুলি কল করলে SecurityException হবে।

ProtectionLevel normal কীভাবে কাজ করে

ProtectionLevel normal হল Android অনুমতি ব্যবস্থায় সর্বনিম্ন সুরক্ষা স্তর। এই স্তরের অনুমতিগুলি মেনিফেস্টে ঘোষণা করা হয়, এবং সিস্টেম ইনস্টলেশনে ঘোষণা যাচাই করে, ব্যবহারকারীর হস্তক্ষেপ ছাড়াই অ্যাক্সেস প্রদান করে। কোন UI উপাদান দেখানো হয় না, কোন কলব্যাক ডাকা হয় না।

যাচাই প্রক্রিয়া PackageManager স্তরে কাজ করে। APK ইনস্টলেশনের সময়, সিস্টেম সকল uses-permission ট্যাগ স্ক্যান করে, permissions.xml ফাইলে সিস্টেম সংজ্ঞায়নের সাথে মিলিয়ে প্রত্যেকটি অনুমতির সুরক্ষা স্তর নির্ধারণ করে, এবং সাধারণ স্তরের জন্য কেবল অ্যাক্সেস নিবন্ধন করে। প্রক্রিয়াটি মিলিসেকেন্ড সময় নেয় এবং ব্যবহারকারী ইন্টারফেসের সাথে কোন মিথস্থাপনের প্রয়োজন হয় না।

প্রদান অ্যালগোরিদমটি নিম্নলিখিতভাবে কাজ করে:

  • সিস্টেম অ্যাপ্লিকেশন ইনস্টলেশনের সময় মেনিফেস্ট পড়ে
  • এটি ডিভাইসে /etc/permissions/ এ protectionLevel মিলিয়ে দেখে
  • যদি মান normal হয় — স্বচালিতভাবে অ্যাক্সেস প্রদান করে
  • অনুমতিটি অ্যাপ্লিকেশন সম্পূর্ণ আনইনস্টল না হওয়া পর্যন্ত সক্রিয় থাকে

ব্যবহারকারী ইন্টারফেসের মাধ্যমে একটি সাধারণ অনুমতি প্রত্যাহার করতে পারে না। অ্যাপ্লিকেশন সেটিংসের অনুমতি অনুভাগে, কেবল বিপদজনক অনুমতিগুলি প্রদর্শিত হয়। এটি iOSএর বিপরীত, যেখানে প্রত্যেকটি অনুমতির জন্য ফাংশনের সংবেদনশীলতা স্তর নির্বিশেষে পৃথক নিশ্চিতকরণ প্রয়োজন।

Normal Permission বাম বিপদজনক অনুমতি

Normal এবং Dangerous Permission হল Android এ সুরক্ষার দুটি বিপরীত শ্রেণী। মূল পার্থক্য প্রদানের পদ্ধতিতে: সাধারণগুলি ইনস্টলেশনে স্বচালিতভাবে দেওয়া হয়, বিপদজনকগুলির জন্য একটি রানটাইম ডায়ালগের মাধ্যমে স্পষ্ট সম্মতি প্রয়োজন। এই পার্থক্য Android 6.0 Marshmallow সংস্করণ থেকে শুরু করে Android সুরক্ষা আর্কিটেকচারে নির্মিত।

মূল বৈশিষ্ট্যগুলির তুলনা:

বৈশিষ্ট্যNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
ব্যবহারকারী অনুরোধপ্রয়োজন নেইরানটাইম ডায়ালগ বাধ্যবাধক
প্রত্যাহারের ক্ষমতানা, শুধু অ্যাপ্লিকেশন আনইনস্টল করেহ্যাঁ, যে কোন সময় সেটিংসের মাধ্যমে
কোডে যাচাইসবসময় PERMISSION_GRANTEDcheckSelfPermission বাধ্যবাধক
উদাহরণINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

ব্যবহারকারী অনুরোধে পার্থক্য

Normal Permission অনুরোধ করার সময় ব্যবহারকারী কোন ডায়ালগ দেখে না। যদি একটি অ্যাপ্লিকেশনের INTERNET প্রয়োজন হয় — এটি নিশ্চববে এটি পেয়ে যায়। Dangerous Permissionএর জন্য, সিস্টেম অনুরোধিত অ্যাক্সেসের বর্ণনা সহ একটি মোডাল ডায়ালগ দেখায়। ব্যবহারকারী অনুমতি বা অস্বীকার টিপে, এবং পরে যে কোন সময় সেটিংসের মাধ্যমে অনুমতি প্রত্যাহার করতে পারে। এটি একটি মূল UX পার্থক্য যা ইন্টারফেস ডেভেলপমেন্ট কৌশল নির্ধারণ করে।

কখন Normal বাছবেন

Normal ব্যবহার করা উচিত সকল ক্ষেত্রে যেখানে অ্যাক্সেস সংবেদনশীল ডেটার সাথে সম্পর্কিত নয়। কানেক্টিভিটি যাচাইয়ের জন্য ACCESS_NETWORK_STATE, হ্যাপটিক ফিডব্যাকের জন্য VIBRATE, HTTP অনুরোধের জন্য INTERNET — এগুলি সকলই সাধারণ অনুমতি। যেখানে normal যথেষ্ট সেখানে dangerous স্তর ব্যবহার করা খারাপ অভ্যাস, যা অনাবশ্যক ডায়ালগ তৈরি করে এবং অ্যাপ্লিকেশনে ব্যবহারকারীর আস্থা হ্রাস করে।

Android এ সাধারণ অনুমতির তালিকা

Android সংজ্ঞায়িত করে প্রায় ডজন সাধারণ অনুমতি, প্রত্যেকটি একটি নির্দিষ্ট সিস্টেম ফাংশনের অনুরূপ। এগুলি Manifest.permission ক্লাসের কনস্টেন্টের মাধ্যমে উপলব্ধ। নীচে অ্যাপ্লিকেশন ডেভেলপমেন্টে সবচেয়ে বেশি ব্যবহৃত অনুমতিগুলির একটি তালিকা দেওয়া হলো।

কনস্টেন্টঅ্যাক্সেসবর্ণনা
INTERNETনেটওয়ার্কHTTP অনুরোধের জন্য নেটওয়ার্ক সকেট খোলা
ACCESS_NETWORK_STATEনেটওয়ার্কনেটওয়ার্কের অবস্থা সম্পর্কে তথ্য প্রাপ্ত করা
ACCESS_WIFI_STATEWi-FiWi-Fi সংযোগ সম্পর্কে তথ্য পড়া
VIBRATEকম্পনডিভাইস ভাইব্রেটার নিয়ন্ত্রণ করা
BLUETOOTHBluetoothBluetooth ডিভাইসের সাথে সংযোগ করা
WAKE_LOCKপাওয়ারপ্রসেসরকে সীপ মোডে যেতে বাধা দেওয়া
SET_ALARMঅ্যালার্মAlarmManagerএর মাধ্যমে অ্যালার্ম সেট করা
CHANGE_NETWORK_STATEনেটওয়ার্কনেটওয়ার্ক সংযোগের অবস্থা পরিবর্তন করা

সাধারণ অনুমতির শ্রেণী

সাধারণ অনুমতিগুলি UI প্রদর্শনের জন্য {«Permission Group»} এ সমূহবদ্ধ হয় না। Android এ সমূহগুলি সেটিংস স্ক্রিনের জন্য, যেখানে কেবল বিপদজনক অনুমতিগুলি দেখানো হয়। তবে, সাধারণ অনুমতিগুলিকে যুক্তিগতভাবে বিভাগ করা যেতে পারে: নেটওয়ার্ক (INTERNET, ACCESS_NETWORK_STATE), হার্ডওয়্যার (VIBRATE, WAKE_LOCK), সিস্টেম (SET_ALARM) এবং Bluetooth অনুমতি।

Manifest.permission এর কিছু কনস্টেন্ট বিভিন্ন Android সংস্করণে তাদের সুরক্ষা স্তর পরিবর্তন করতে পারে। উদাহরণস্বরূপ, BLUETOOTH_CONNECT Android 12+ এ একটি রানটাইম অনুরোধ সহ বিপদজনক অনুমতিতে পরিণত হয়েছে, যদিও পুরানো সংস্করণে এটি সাধারণ ছিল। ডকুমেন্টেশনের মাধ্যমে লক্ষ্য APIর জন্য বর্তমান protectionLevel যাচাই করতে ডেভেলপারদের পরামর্শ দেওয়া হয়।

PackageManagerএর মাধ্যমে Normal Permission যাচাই

একজন ডেভেলপার PackageManagerএর মাধ্যমে প্রোগ্রামাটিকভাবে যাচাই করতে পারেন যে একটি অনুমতি সাধারণ কিনা। getPermissionInfo পদ্ধতিটি PermissionInfo ফিরিয়ে দেয় যার protectionLevel ফিল্ডে PermissionInfo.PROTECTION_NORMAL ফ্লাগ থাকে। এটি ডায়নামিক হ্যান্ডলিং এবং ডিবাগিংয়ের জন্য উপযোগী।

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

মেনিফেস্টে Normal Permission ঘোষণা কীভাবে করবেন

Normal Permission ঘোষণা AndroidManifest.xml এ সবদ্দ সহজ কাজ, যাতে কেবল একটি uses-permission ট্যাগ প্রয়োজন। কোন অতিরিক্ত protectionLevel কনফিগারেশনের প্রয়োজন নেই, কারণ সুরক্ষা স্তর সিস্টেম সংজ্ঞা দ্বারা নির্ধারিত, অ্যাপ্লিকেশন মেনিফেস্ট দ্বারা নয়। ডেভেলপার কেবল কনস্টেন্টের পূর্ণ নাম নির্দিষ্ট করে।

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

সিস্টেম ইনস্টলেশনে সকল ঘোষণা প্রক্রিয়া করে। ঘোষিত অনুমতিগুলির মধ্যে কম সে কম একটির যদি normal থেকে ভিন্ন protectionLevel থাকে, তবে একটি রানটাইম অনুরোধের প্রয়োজন হবে। INTERNET হল সবচেয়ে জনপ্রিয় সাধারণ অনুমতি, যা অধিকাংশ Android অ্যাপ্লিকেশনে বিদ্যমান, বিশেষ করে যারা HTTP অনুরোধ করে বা নেটওয়ার্ক থেকে কন্টেন্ট লোড করে।

সম্পূর্ণ মেনিফেস্টের উদাহরণ

সাধারণ এবং বিপদজনক অনুমতি সহ AndroidManifest.xml এর একটি সম্পূর্ণ উদাহরণ পার্থক্যটি প্রদর্শন করে: ব্যাকরণিকভাবে uses-permission ট্যাগগুলি একই, কিন্তু রানটাইমে INTERNET এবং VIBRATE স্বচালিতভাবে প্রদান করা হবে, যখন CAMERAর একটি ডায়ালগ প্রয়োজন হবে।

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

    <!-- Dangerous permission -->
    <uses-permission
        android:name="android.permission.CAMERA" />
</manifest>

Manifest Merger এবং Normal Permission

লাইব্রেরী — Google Play Services, Firebase, Glide — ব্যবহার করলে, তারা Manifest Merger এর মাধ্যমে নিজেদের নিজস্ব uses-permission চূড়ান্ত মেনিফেস্টে যোগ করতে পারে। তাদের কিছু সাধারণ (Firebaseএর জন্য INTERNET), অন্যরা বিপদজনক (Google Mapsএর জন্য ACCESS_FINE_LOCATION)। প্রকাশনের আগে ডেভেলপারকে build/outputs/logs/manifest-merger-report.txt এ চূড়ান্ত মার্জড মেনিফেস্ট যাচাই করা উচিত।

Normal Permission এর সীমাবদ্ধতা

Normal Permission এর দুটি মৌলিক সীমাবদ্ধতা রয়েছে: ব্যবহারকারী দ্বারা এটি প্রত্যাহার এর অক্ষমতা এবং পরিচালনা UIএর অনুপস্থিতি। যদি ব্যবহারকারী অ্যাপ্লিকেশনকে বিশ্বাস না করে কিন্তু সাধারণ অনুমতিটি ইতিমধ্যে স্বচালিতভাবে প্রদান করা হয়েছে — একমাত্র সমাধান হল অ্যাপ্লিকেশন আনইনস্টল করা। এটি একটি নির্দিষ্ট ঝুঁকি তৈরি করে, কারণ Androidএর মানক পদ্ধতিতে সাধারণ অনুমতি অবরুদ্ধ করা যায় না।

একটি অতিরিক্ত সীমাবদ্ধতা বেশ কয়েকটি প্রোফাইল (Work Profile, Multiple Users) সহ ডিভাইসে দেখা দেয়। Normal Permission সকল প্রোফাইলের জন্য একসাথে প্রদান করা হয় — অ্যাপ্লিকেশন অনুমতিটি কেবল একটিতে সীমাবদ্ধ করতে পারে না। এন্টারপ্রাইজ পরিদৃশ্যে এটি Managed Configurationsএর মাধ্যমে সমাধান করা হয়।

একটি অ্যাপ্লিকেশন কোন সময় Normal Permission ব্যবহার করছে কিনা তা যাচাই করা সম্ভব নয়। সিস্টেম পদ্ধতি checkSelfPermission কেবল বিপদজনক অনুমতির জন্য কাজ করে। সাধারণগুলির জন্য এটি সবসময় PERMISSION_GRANTED ফিরিয়ে দেয়, যা প্রকৃত কার্যকলাপ প্রতিফলিত করে না। নিরাপত্তা অডিট এবং অ্যাপ্লিকেশন আচরণ বিশ্লেষণের সময় এটি মনে রাখা উচিত।

এটিও মনে রাখা উচিত যে কিছু ডিভাইস প্রস্তুতকারক (Xiaomi, Huawei, Samsung) অনুমতির মানক আচরণ পরিবর্তন করে। তাদের ফার্মওয়্যারে, Normal Permission এর জন্য MIUI বা EMUI শেলে অতিরিক্ত অনুমতির প্রয়োজন হতে পারে। ডেভেলপারদের বিভিন্ন ভেন্ডারের বাস্তবিক ডিভাইসে পরীক্ষণ করার পরামর্শ দেওয়া হয়।

সাধারণ জিজ্ঞাসা

Normal Permission কীভাবে Dangerous থেকে আলাদা?

Normal Permission ইনস্টলেশনে ডায়ালগ ছাড়াই স্বচালিতভাবে প্রদান করা হয়। Dangerousএর জন্য ব্যবহারকারীর স্পষ্ট সম্মতি সহ একটি রানটাইম অনুরোধ প্রয়োজন এবং এটি সেটিংসের মাধ্যমে প্রত্যাহার করা যেতে পারে। Normal ProtectionLevel normal ব্যবহার করে, Dangerous protectionLevel dangerous ব্যবহার করে।

Normal Permission এর জন্য কি কোড লিখতে হবে?

না, সাধারণ অনুমতির জন্য AndroidManifest.xml এ uses-permission ঘোষণা করা যথেষ্ট। অনুরোধ কোডের প্রয়োজন নেই — সিস্টেম স্বচালিতভাবে অ্যাক্সেস প্রদান করে। এটি এদের বিপদজনক থেকে আলাদা করে, যেখানে ActivityCompat.requestPermissions প্রয়োজন।

কোন কোন Normal Permission সবচেয়ে জনপ্রিয়?

সবচেয়ে বেশি ব্যবহৃত: INTERNET (নেটওয়ার্ক অনুরোধ), ACCESS_NETWORK_STATE (কানেকশন যাচাই), VIBRATE (হ্যাপটিক ফিডব্যাক) এবং WAKE_LOCK (প্রসেসরকে জাগরুক রাখা)। প্রায় প্রতিটি Android অ্যাপ্লিকেশন কম সে কম INTERNET ব্যবহার করে।

কি Normal Permission প্রত্যাহার করা যেতে পারে?

না, Normal Permission অ্যাপ্লিকেশন সেটিংসের মাধ্যমে প্রত্যাহার করা যায় না। অ্যাক্সেস বন্ধ করার একমাত্র উপায় হল অ্যাপ্লিকেশন আনইনস্টল করা। এটি বিপদজনক অনুমতি থেকে একটি মূল পার্থক্য, যা ব্যবহারকারী যে কোন সময় নিষ্ক্রিয় করতে পারে।

একটি অনুমতির ProtectionLevel কীভাবে যাচাই করবেন?

PackageManager.getPermissionInfo ব্যবহার করুন, অনুমতির স্ট্রিং নাম পেস করুন। পদ্ধতিটি PermissionInfo একটি protectionLevel ফিল্ড সহ ফিরিয়ে দেয়। শ্রেণী নির্ধারণের জন্য এটিকে PermissionInfo.PROTECTION_NORMAL বা PROTECTION_DANGEROUS কনস্টেন্টের সাথে তুলনা করুন।

সারাংশ

  • Normal Permission ProtectionLevel normal সহ Android অনুমতির একটি শ্রেণী, যা ইনস্টলেশনে স্বচালিতভাবে প্রদান করা হয়।
  • ঘোষণার জন্য রানটাইম কোড ছাড়া AndroidManifest.xml এ uses-permission ট্যাগ যথেষ্ট।
  • এগুলি বিপদজনকগুলির থেকে ডায়ালগের অনুপস্থিতি, প্রত্যাহারের অক্ষমতা এবং নিম্ন ঝুঁকি স্তরে পার্থক্য রাখে।
  • সবচেয়ে জনপ্রিয়: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE এবং WAKE_LOCK।
  • কোডে PackageManager.getPermissionInfo এর মাধ্যমে ProtectionLevel যাচাই করা হয়।
  • সাধারণ অনুমতিগুলি অ্যাপ্লিকেশন সেটিংস স্ক্রিনে প্রদর্শিত হয় না।
  • লাইব্রেরী ব্যবহার করার সময়, Manifest Merger এর মাধ্যমে চূড়ান্ত মেনিফেস্ট যাচাই করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন