Camera Permission ایک اجازت ہے جو موبائل ایپ صارف سے ڈیوائس کیمرے تک رسائی کے لیے درخواست کرتی ہے۔ اس کے بغیر، ایپ تصاویر نہیں لے سکتی، QR کوڈ اسکین نہیں کر سکتی، یا ویڈیو کال شروع نہیں کر سکتی۔ Android Developers، 2024 کے مطابق، Android 6.0 اور اس سے اوپر کیمرہ استعمال کرنے والی تمام ایپس سسٹم ڈائیلاگ کے ذریعے رن ٹائم پر اجازت کی درخواست کرنے کی پابند ہیں۔
اہم نکات
Camera Permission ایک سسٹم اجازت ہے جو ایپس کے موبائل ڈیوائس کیمرے تک رسائی کو منظم کرتی ہے۔ موبائل پلیٹ فارم کیمرے کو ایک حساس وسیلہ سمجھتے ہیں کیونکہ یہ ریئل ٹائم میں ویڈیو ریکارڈ کرنے اور صارف کے ماحول کی تصاویر لینے کی اجازت دیتا ہے۔
Android پر، CAMERA اجازت خطرناک اجازتوں (dangerous permissions) کے زمرے میں آتی ہے اور اس کے لیے لازمی رن ٹائم درخواست درکار ہے۔ iOS پر، Info.plist میں NSCameraUsageDescription کلید شامل کرنا کیمرے تک رسائی حاصل کرنے والی کسی بھی ایپ کے لیے لازمی شرط ہے۔ اس کلید کے بغیر، کیمرہ کھولنے کی کوشش کرنے پر ایپ کریش ہو جائے گی۔
Statista (2024) کی ایک تحقیق کے مطابق، ٹاپ 100 App Store میں تقریباً 68% موبائل ایپس کسی نہ کسی شکل میں کیمرہ استعمال کرتی ہیں: QR کوڈ اسکین کرنے سے لے کر مکمل تصویر اور ویڈیو کیپچر تک۔ اسی وقت، 37% صارفین کیمرے تک رسائی سے انکار کر دیتے ہیں اگر وہ نہیں سمجھتے کہ ایپ کو اس اجازت کی ضرورت کیوں ہے۔
Android پر Camera Permission مینی فیسٹ میں اعلامیہ اور اس کے بعد رن ٹائم درخواست کے ذریعے مانگی جاتی ہے۔ Android 6.0 سے شروع کرتے ہوئے، CAMERA اجازت صرف انسٹالیشن کے مرحلے پر حاصل نہیں کی جا سکتی — صارف کو واضح طور پر رسائی کی تصدیق کرنی ہوگی۔
Android پر کیمرہ استعمال کرنے کے لیے، آپ کو مینی فیسٹ فائل میں متعلقہ اعلامیہ شامل کرنا ہوگا۔ اس کے بغیر، سسٹم رن ٹائم درخواست ہونے کے باوجود ایپ کو کیمرہ کھولنے کی اجازت نہیں دے گا۔
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
uses-feature کے لیے android:required=false وصف ایپ کو بغیر کیمرہ والے آلات پر انسٹال ہونے کی اجازت دیتا ہے۔ یہ اہم ہے اگر کیمرہ پوری ایپ کے آپریشن کے لیے لازمی جزو نہیں ہے۔
Camera Permission کی درخواست Activity Result API کے ذریعے کی جاتی ہے۔ جواب موصول ہونے کے بعد، ایپ اسٹیٹس چیک کرتی ہے اور کیمرہ شروع کرتی ہے یا وضاحت دکھاتی ہے۔
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
// تصویر محفوظ ہو گئی
showPhoto(photoUri)
}
}
private val permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
openCamera()
} else {
showPermissionDenied()
}
}
fun capturePhoto() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera()
} else {
permissionLauncher.launch(Manifest.permission.CAMERA)
}
}
Android 11 سے شروع کرتے ہوئے، اگر صارف نے کیمرے تک رسائی سے دو بار انکار کیا ہے، تو سسٹم ڈائیلاگ مزید نہیں دکھایا جائے گا۔ Never Ask Again فلیگ خود بخود سیٹ ہو جاتا ہے، اور ایپ صرف Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) کے ذریعے صارف کو سسٹم سیٹنگز پر ری ڈائریکٹ کر سکتی ہے۔ ڈویلپر کو بروقت پیشگی وضاحت اسکرین دکھانے کے لیے shouldShowRequestPermissionRationale کی جانچ شامل کرنی چاہیے۔
iOS پر Camera Permission Info.plist میں NSCameraUsageDescription کلید اور AVCaptureDevice.requestAccess کال کے ذریعے منظم کی جاتی ہے۔ Apple درخواست کے جواز کو سختی سے چیک کرتا ہے: اگر ایپ کیمرہ کو صارف کے لیے واضح نہ ہونے والے طریقے سے استعمال کرتی ہے، تو App Store ایپ کو مسترد کر سکتا ہے۔
iOS پر کیمرے تک رسائی کے لیے ایک لازمی شرط Info.plist فائل میں NSCameraUsageDescription کلید شامل کرنا ہے۔ ویلیو سٹرنگ درخواست کی وجہ کے طور پر سسٹم ڈائیلاگ میں دکھائی جائے گی۔
<key>NSCameraUsageDescription</key>
<string>پروفائل تصاویر بنانے اور QR کوڈز اسکین کرنے کے لیے ایپ کو کیمرے تک رسائی درکار ہے۔</string>
Swift میں، درخواست جامد طریقہ AVCaptureDevice.requestAccess کے ذریعے کی جاتی ہے۔ جواب موصول ہونے کے بعد، ایپ اسٹیٹس پر کارروائی کرتی ہے اور کیپچر سیشن شروع کرتی ہے۔
import AVFoundation
func requestCameraAccess() {
AVCaptureDevice.requestAccess(for: .video) { granted in
DispatchQueue.main.async {
if granted {
self.setupCameraSession()
} else {
self.showSettingsAlert()
}
}
}
}
private func setupCameraSession() {
guard let device = AVCaptureDevice.default(.for: .video)
else { return }
do {
let input = try AVCaptureDeviceInput(device: device)
let session = AVCaptureSession()
session.addInput(input)
session.startRunning()
} catch {
print("Camera error: \(error)")
}
}
کیمرے تک رسائی کی درخواست کرنے سے پہلے، AVCaptureDevice.authorizationStatus(for: .video) کے ذریعے موجودہ اجازت نامے کی اسٹیٹس چیک کرنے کی سفارش کی جاتی ہے۔ یہ غیر ضروری سسٹم ڈائیلاگ کالز سے بچاتا ہے اور ان معاملات کو درست طریقے سے سنبھالتا ہے جہاں صارف پہلے ہی فیصلہ کر چکا ہے۔ اسٹیٹس .notDetermined، .restricted، .denied یا .authorized ہو سکتی ہے۔
Camera Permission سادہ اسکیننگ سے لے کر مکمل ویڈیو کیپچر تک مختلف منظرناموں میں لاگو کیا جاتا ہے۔ ہر منظرنامے کے نفاذ اور اجازت کے انتظام کے لیے اپنی ضروریات ہوتی ہیں۔
iOS پر، QR کوڈ اسکین کرنے کے لیے AVFoundation فریم ورک سے AVCaptureMetadataOutput استعمال کیا جاتا ہے، جس کے لیے Camera Permission درکار ہے۔ Android پر، Google کے ML Kit Barcode Scanning استعمال کرنے کی سفارش کی جاتی ہے۔ یہ نوٹ کرنا ضروری ہے کہ QR کوڈ اسکیننگ کیمرہ خود استعمال کرتی ہے، نہ کہ امیج اینالیسس لائبریری — اس لیے، Camera Permission لازمی ہے۔
معیاری تصویر یا ویڈیو کیپچر کے لیے iOS اور Android دونوں پر Camera Permission درکار ہے۔ Android پر، آپ Intent(MediaStore.ACTION_IMAGE_CAPTURE) استعمال کر سکتے ہیں، جو سسٹم کیمرہ ایپ کھولتا ہے — اس صورت میں، اجازت سسٹم ایپ مانگتی ہے، آپ کی ایپ نہیں۔ تاہم، ایپ میں کیمرہ پیش نظارہ (CameraX، Camera2 API) کے لیے، آپ کی اپنی اجازت درکار ہے۔
ویڈیو کالنگ ایپس (Zoom، Google Meet) اور بڑھی ہوئی حقیقت ایپس (ARCore، ARKit) سامنے یا پچھلے کیمرے سے ویڈیو کیپچر کرنے کے لیے Camera Permission کی درخواست کرتی ہیں۔ اس صورت میں، درخواست کو خاص طور پر احتیاط سے سمجھایا جانا چاہیے، کیونکہ صارف یہ توقع نہیں کر سکتا کہ AR فرنیچر فٹنگ ایپ کیمرے کی درخواست کرے گی۔
iOS پر کیمرے کے ساتھ کام کرتے وقت، آپ AVCaptureDeviceInput اور AVCapturePhotoOutput کے ذریعے کیپچر پیرامیٹرز ترتیب دے سکتے ہیں۔ Android پر، CameraX ImageCapture، VideoCapture اور Preview کال بیکس کے ذریعے ترتیب کو آسان بناتا ہے۔ ہر سیٹنگ کے لیے، آپ کو مطلوبہ ریزولوشن، زوم لیول اور فوکس موڈ بتانا ہوگا۔ صحیح کیپچر کنفیگریشن کا انتخاب براہ راست ایپ کی کارکردگی اور بیٹری کی کھپت کو متاثر کرتا ہے۔
کیمرے کے ساتھ کام کرتے وقت مختلف خرابیاں پیدا ہو سکتی ہیں۔ کیمرہ کسی دوسری ایپ کے زیر استعمال ہو سکتا ہے، سسٹم پرائیویسی سیٹنگز میں غیر فعال ہو سکتا ہے، یا ڈیوائس پر موجود نہیں ہو سکتا۔ Android پر، CameraManager.openCamera کال کرتے وقت CameraAccessException کو سنبھالنے کی سفارش کی جاتی ہے۔ iOS پر، AVCaptureDevice.authorizationStatus چیک کریں اور صارف کو رسائی فعال کرنے کے لیے سیٹنگز میں جانے کی پیشکش کرکے انکار کو درست طریقے سے سنبھالیں۔ PackageManager.hasSystemFeature استعمال کرکے اجازت کی درخواست سے پہلے ہمیشہ ڈیوائس پر کیمرے کی موجودگی چیک کریں۔ اس طرح کی جانچ کیمرہ کے بغیر آلات پر غیر ضروری درخواستوں کو روکتی ہے اور صارف کے تجربے کو بہتر بناتی ہے۔
کارکردگی کی اصلاح کیمرے کے ساتھ کام کرتے وقت ایپ کے ہموار آپریشن کے لیے اہم ہے۔ ہائی ریزولوشن میں ویڈیو کیپچر کرنا اہم CPU اور بیٹری وسائل استعمال کرتا ہے۔
iOS پر، اگر ایپ کو 4K کیپچر کی ضرورت نہیں ہے تو زیادہ سے زیادہ ریزولوشن کے بجائے AVCaptureSessionPresetMedium استعمال کریں۔ Android پر، CameraX آپ کو ImageCaptureConfig.Builder کے ذریعے ہدف ریزولوشن کے ساتھ ImageCapture کنفیگر کرنے کی اجازت دیتا ہے۔ جب ایپ بیک گراؤنڈ میں جائے تو کیمرہ جاری کرنا اور واپس آنے پر دوبارہ حاصل کرنا بھی ضروری ہے۔ یہ بیٹری کی زندگی بچانے کے لیے Google اور Apple کی تجویز کردہ معیاری مشق ہے۔
بہترین طریقے Camera Permission کی منظوری کی شرح بڑھانے اور App Store یا Google Play کی طرف سے ایپ کے مسترد ہونے سے بچنے میں مدد دیتے ہیں۔
سسٹم ڈائیلاگ دکھانے سے پہلے، ایک اسکرین دکھائیں جس میں مثال ہو کہ کیمرہ کیسے استعمال ہوگا: اسکیننگ انٹرفیس کی تصویر، پروفائل فوٹو فریم، پہچانے گئے QR کوڈ کی مثال۔ بصری وضاحت متنی وضاحت سے بہتر کام کرتی ہے۔ UX Movement (2024) کے مطابق، بصری پیش نظارہ شامل کرنے سے منظوری کی شرح 72% تک بڑھ جاتی ہے۔
ایپ کے پہلے لانچ پر کبھی بھی Camera Permission کی درخواست نہ کریں۔ ایک صارف جس نے ابھی ایپ کھولی ہے، اگر وہ سیاق و سباق نہیں سمجھتا تو امکان ہے کہ انکار کرے گا۔ صرف اس وقت رسائی کی درخواست کریں جب صارف کیمرے کی ضرورت والے بٹن کو دباتا ہے: «پروفائل فوٹو لیں»، «کوڈ اسکین کریں»، «ویڈیو کال شروع کریں»۔ ایک سیاقی محرک درخواست کو زیادہ بامعنی بناتا ہے۔
اگر صارف Camera Permission سے انکار کرتا ہے، تو عمل کو انجام دینے کا متبادل طریقہ پیش کریں: گیلری سے تصویر منتخب کرنا، دستی طور پر QR کوڈ ڈیٹا درج کرنا، ڈیوائس سے تصویر اپ لوڈ کرنا۔ انکار کو ایپ کی فعالیت کو مکمل طور پر مسدود نہیں کرنا چاہیے — یہ Google Play اور App Store ڈیزائن کی سفارشات کی ضرورت ہے۔
اکثر پوچھے گئے سوالات
اگر اجازت کے بغیر کیمرہ کھولنے کی کوشش کرنے پر ایپ کریش ہوتی ہے، تو آپ کو خرابی ملے گی۔ آپ کو Android پر checkSelfPermission یا iOS پر authorizationStatus کے ذریعے پہلے سے اسٹیٹس چیک کرنی چاہیے اور متبادل منظرنامہ پیش کرنا چاہیے۔
ہاں، کیمرے کے ذریعے QR کوڈ اسکین کرنے کے لیے Camera Permission ضروری ہے۔ ایک متبادل طریقہ یہ ہے کہ کیمرہ کے بغیر تصویر سے QR کوڈ پہچاننے والی لائبریریز استعمال کریں (مثال کے طور پر، گیلری سے کوڈ والی تصویر ڈاؤن لوڈ کرنا)، لیکن اس کے لیے Photo Library Permission درکار ہے۔
Jetpack Compose آرکیٹیکچر میں، آپ composable فنکشن میں ActivityResultContracts.RequestPermission کے ساتھ rememberLauncherForActivityResult استعمال کر سکتے ہیں۔ UI کے بغیر سروسز کے لیے، براہ راست اجازت کی درخواست ممکن نہیں ہے — کنٹرول Activity کو منتقل کیا جانا چاہیے۔
سب سے زیادہ ممکنہ وجہ Info.plist میں NSCameraUsageDescription کلید کی عدم موجودگی ہے۔ iOS 10 سے، اس کلید کے بغیر AVCaptureDevice تک کسی بھی رسائی کے نتیجے میں NSInvalidArgumentException استثنیٰ کے ساتھ کریش ہوتا ہے۔
Android پر، Settings → Apps → [App] → Permissions کے ذریعے ایپ سیٹنگز ری سیٹ کریں۔ iOS پر، Settings → [App] → Camera ٹوگل استعمال کریں۔ iOS پر ٹیسٹ آٹومیشن کے لیے، آپ resetAuthorizationStatus کے ساتھ XCUITest استعمال کر سکتے ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں