طلب الأذونات في Compose
استخدم واجهات Accompanist أو activity result
طلب الأذونات في Compose درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
طلب الصلاحيات في Compose
في Jetpack Compose، تطلب الصلاحيات أثناء التشغيل باستخدام Activity Result API، الذي يغلّفه rememberLauncherForActivityResult. ويغني ذلك عن رد النداء القديم onRequestPermissionsResult.
عقد RequestPermission
تستخدم Activity Result API عقودًا تحدد الإدخال والإخراج. يستقبل ActivityResultContracts.RequestPermission() سلسلة الصلاحية، ويعيد نتيجة منح من النوع Boolean.
إنشاء Launcher
ينشئ rememberLauncherForActivityResult كائن launcher مرتبطًا بعملية التركيب. وتمرر إليه العقد ورد نداء يستقبل النتيجة.
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// permission granted, use the feature
} else {
// permission denied
}
}إطلاق الطلب
استدعِ launcher.launch مع الصلاحية التي تريدها. سيعرض النظام مربع الحوار، ثم يُستدعى رد النداء مع اختيار المستخدم.
Button(onClick = {
launcher.launch(Manifest.permission.CAMERA)
}) {
Text("Enable Camera")
}تحقق قبل الطلب
لا تطلق طلبًا دون تحقق. تحقق أولًا مما إذا كانت الصلاحية ممنوحة بالفعل، ولا تطلبها إلا إذا لم تكن ممنوحة.
val context = LocalContext.current
val alreadyGranted = ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTEDتتبع الحالة في Compose
احتفظ بحالة المنح الحالية في state حتى تتمكن واجهة المستخدم من الاستجابة. حدّثها داخل رد نداء launcher.
var hasCamera by remember {
mutableStateOf(
ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
)
}
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted -> hasCamera = granted }طلب عدة صلاحيات
لطلب عدة صلاحيات دفعةً واحدة، استخدم عقد RequestMultiplePermissions. يستقبل رد النداء خريطةً تربط كل صلاحية بحالة منحها.
val multi = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { results ->
val fineLocation = results[Manifest.permission.ACCESS_FINE_LOCATION] == true
}
multi.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)توجيه واجهة المستخدم من الحالة
اعرض محتوى مختلفًا استنادًا إلى حالة المنح: إذا كانت الصلاحية ممنوحة، فاعرض الميزة؛ وإلا فاعرض زرًا لطلبها. يحافظ ذلك على تفاعلية الشاشة ووضوحها.
if (hasCamera) {
CameraPreview()
} else {
Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
Text("Grant camera access")
}
}خيار Accompanist Permissions
توفر مكتبة Accompanist Permissions أدوات مساعدة عالية المستوى مثل rememberPermissionState. تفضّل فرق كثيرة استخدام Activity Result API مباشرةً لتجنب تبعية إضافية؛ وكلا الخيارين صالح.
لا تطلب الصلاحية عند التشغيل
تجنب إطلاق طلب الصلاحية فور ظهور الشاشة. انتظر حتى ينقر المستخدم على إجراء يحتاج إليها بوضوح. تحقق الطلبات المرتبطة بالسياق معدلات منح أعلى بكثير.
تذكّر تغييرات الإعدادات
يبقى rememberLauncherForActivityResult محفوظًا عبر إعادة التركيب، كما يسلّم إطار Activity Result النتائج بصورة صحيحة حتى عبر تغييرات الإعدادات مثل التدوير. ولا تحتاج إلى إدارة هذه التفاصيل بنفسك.
اختبار سريع
اختبر مدى فهمك لطلب الصلاحيات.
مراجعة
لقد طلبت الصلاحيات بالطريقة الحديثة:
- استخدم
rememberLauncherForActivityResultمع عقدRequestPermission - تحقق أولًا، ثم استدعِ
launcher.launch(permission) - تتبع حالة المنح في state لتوجيه واجهة المستخدم
- استخدم
RequestMultiplePermissionsلطلب عدة صلاحيات دفعةً واحدة
التالي: التعامل مع حالات الرفض وعرض التبرير.
الأسئلة الشائعة
هل درس «طلب الأذونات في Compose» مجاني؟
نعم — نص درس «طلب الأذونات في Compose» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «طلب الأذونات في Compose»؟
استخدم واجهات Accompanist أو activity result تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «طلب الأذونات في Compose»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نموذج الأذونات في Android
- طلب الأذونات في Compose
- معالجة الرفض وشرح السبب
- أفضل ممارسات الخصوصية