- التصنيف : أندرويد, مميز
- 26 Jan 2012
- الكاتب : عبد القهار الحسني
- التعليقات : 1
- الزيارات : 281
السلام عليكم
في الحلقة الأخيرة من هذه السلسلة قدمت عرضاً لملف AndroidManifest.xml والأوسمة التي يحتويها. وأحد هذه الأوسمة خاص بالتصاريح المطلوبة لتنصيب التطبيق على الجهاز وتشغيله. وسوف أقوم في هذه الحلقة بشرح طبيعة التصاريح وما هو دور كل منها.
صمم الأندرويد ليجعل كل تطبيق منعزل عن التطبيقات الأخرى ومحتويات الجهاز أيضاً ولا يمكنه الدخول إليها أو التحكم بها من دون إذن صريح من المستخدم وهذا ما يعرف بالتصاريح Permissions. وهذا طبعاً مبني على نظام اللينكس Linux وهو الذي يقم بعملية فصل التطبيقات عن بعضها البعض وعن النظام نفسه. إذاً هناك حاجة لوضع التصاريح في التطبيق إذا كنت تريد الدخول إلى محتويات الذاكرة الخارجية للجهاز، حسابات المستخدم أو موقعه من خلال GPS وغير ذلك. كل هذا يتم بوضع التصاريح في ملف AndroidManifst.xml ويتم عرض التصاريح للمستخدم أثناء تحميل التطبيق وفي صفحة التطبيق داخل النظام في حال رغب المستخدم استعراضها مرة أخرى. هناك نوعين من التصاريح: تصاريح مفردة وتصاريح مجموعة. التصاريح المفردة تكون لطلب تصريح واحد فقط ويتم وضعها بشكل فردي من خلال هذا الكود:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
أما التصاريح المجموعة فتكون عبارة عن طلب عدة من التصاريح من خلال كود واحد، كما في هذا الكود:
<permission-group android:description="description" android:icon="drawable" android:label="label" android:name="android.permission-group.PERSONAL_INFO" />
في هذا الكود يتم طلب مجموعة تصاريح متعلقة بالمعلومات الخاصة بالمستخدم على الجهاز كالبريد الألكتروني، وجهات الاتصال، والتقويم وغير ذلك.
ملاحظة: عند وضع اسم التصريح يجب وضع اسم المساحة namespace وهو هنا android.permission للتصاريح المفردة، وandroid.permission-group للتصاريح المجموعة. اسم المساحة ضروري لكي يتم التفريق بين التصريحات التي يستعملها النظام والتصاريح التي تقوم بإنشائها في التطبيق.
هناك أربعة انواع من التصاريح الخاصة بالأندرويد:
- عادية (Regular)
- خطرة (Dangerous)
- نظام (System)
- مصرحة (Signed)
النوعين الأوليين يمكن الحصول عليهما لكافة التطبيقات، اما النوعين الثالث والرابع فلا يمكن للتطبيق الحصول عليهما إلا إذا كان تطبيق نظام (أي ياتي جاهزاً مع الروم الخاص بالجهاز).
قائمة بالتصاريح المفردة ووظيفة كل منها (وضعت في هذه القائمة أهم التصاريح، يمكنك مراجعة كافة التصاريح من موقع الأندرويد نفسه):
| ACCESS_CHECKIN_PROPERTIES |
يسمح بقراءة/كتابة إعدادات الجدول الخاص بقواعد بيانات تسجيلات الأماكن (Checking Database) التي يتم رفعها. |
| ACCESS_COARSE_LOCATION |
يسمح للتطبيق باستعمال شبكة الهاتف أو الشبكة اللاسلكية (المكان العام – Coarse Loaction) |
| ACCESS_FINE_LOCATION |
يسمح للتطبيق باستعمال شبكة الجي بي أس (المكان الدقيق – Fine Location) |
| ACCESS_LOCATION_EXTRA_COMMANDS |
يسمح للتطبيق باستعمال الأوامر الإضافية الخاصة بمزودي المكان (location provider) |
| ACCESS_MOCK_LOCATION |
يسمح للتطبيق بإنشاء مزودات خدمة وهمية لغرض التجربة |
| ACCESS_NETWORK_STATE |
يسمح للتطبيق بالحصول على معلومات خاصة بالشبكات المختلفة في الجهاز (لمعرفة ما إذا كانت الشبكة متوفرة أم لا، تعمل أم لا .. وغير ذلك) |
| ACCESS_SURFACE_FLINGER |
يسمح للتطبيق باستعمال خصائص SurfaceFlinger ذات المستوى المتدني (التعامل مع العتاد بشكل أقرب). |
| ACCESS_WIFI_STATE |
يسمح للتطبيق بالحصول على معلومات الشبكة اللاسلكية في الجهاز (مفعّلة أم لا، مغلقة أم لا، وغير ذلك). |
| ACCOUNT_MANAGER |
السماح للتطبيق بالدخول إلى الحسابات المضافة للجهاز. (الحسابات التي تضاف في الإعدادات في الأندرويد) |
| ADD_VOICEMAIL |
السماح بإضافة بريد صوتي للتطبيق. |
| BATTERY_STATS |
السماح للتطبيق بالحصول على معلومات البطارية |
| BIND_APPWIDGET |
السماح للتطبيق بإعلام الخدمة الخاصة بالقطع (AppWidget Service) أي تطبيق يمكنه الدخول إلى بيانات القطع. |
| BIND_DEVICE_ADMIN |
هذا التصريح هو لمستقبل إدارة الجهاز. وغرضه هو التأكد من أن المستقبل يتعامل مع النظام فقط (وليس مع تطبيقات أخرى مثلاً). |
| BIND_INPUT_METHOD |
يجب أن يطلب هذا التصريح في حالة استعمال InputMethodService للتأكد من أن النظام هو القسم الوحيد الذي يرتبط التطبيق. |
| BIND_REMOTEVIEWS |
|
| BIND_TEXT_SERVICE |
يجب أن يطلب في حالة استعمال خدمة نصية (TextService) كاستعمال خدمة المدقق الإملائي SpellCheckerService للتأكد من النظام فقط يرتبط بالتطبيق |
| BIND_VPN_SERVICE |
|
| BIND_WALLPAPER |
يجب ان يطلب في حالة استعمال WallpaperService, للتاكد من النظام فقط يرتبط بالتطبيق |
| BLUETOOTH |
يسمح للتطبيق بالاتصال بالأجهزة الاخرى عن طريق البلوتوث |
| BLUETOOTH_ADMIN |
يسمح للتطبيق بعمل مسح للاجهزة المحيطة وعمل مزاوجة معها عن طريق البلوتووث |
| BRICK |
هذا التصريح مطلوب لتعطيل الجهاز (خطر جداً لذلك لا ينصح باستعماله) |
| BROADCAST_PACKAGE_REMOVED |
يسمح للتطبيق بارسال تنبيه بأن حزمة التطبيق قد حذفت |
| BROADCAST_SMS |
يسمح للتطبيق بمعرفة حالة الرسائل النصية SMS |
| BROADCAST_STICKY |
يسمح للتطبيق بإرسال نوايا دائمة (Sticky intents). الخدمات المبنية على هذا النوع من النوايا يكون له الاولوية في الإبقاء في حالة احتاج النظام إلى الموارد. |
| BROADCAST_WAP_PUSH |
السماح للتطبيق بنشر تنبيهات WAP PUSH |
| CALL_PHONE |
السماح للتطبيق بالقيام بعمليات الاتصال من غير الحاجة لاستعمال واجهة الاتصال المعتادة |
| CALL_PRIVILEGED |
السماح للتطبيق بالاتصال بأي رقم بما في ذلك أرقام الطوارئ من غير الحاجة لاستعمال واجهة الاتصال المعتادةAllows an |
| CAMERA |
السماح للتطبيق باستعمال الكامير |
| CHANGE_COMPONENT_ENABLED_STATE |
السماح للتطبيق بتغير أجزاء التطبيقات الأخرى (تفعيل وإلغاء تلك الأجزاء Components). |
| CHANGE_CONFIGURATION |
السماح للتطبيق بتغير إعدادات النظام (كاللغة المستعملة) |
| CHANGE_NETWORK_STATE |
السماح للتطبيق بتغير حالة الاتصال بالشبكة (أي إمكانية تفعيل أو إلغاء التفعيل للشبكة من خلال التطبيق) |
| CHANGE_WIFI_MULTICAST_STATE |
السماح للتطبيق بالدخول إلى حالة الاتصال المتعدد للشبكة اللاسلكية Wi-Fi Multicast mode |
| CHANGE_WIFI_STATE |
السماح للتطبيق بتغير حالة الاتصال بالشبكة اللاسلكية |
| CLEAR_APP_CACHE |
السماح للتطبيق بمسح ملفات الخابية Cache لكافة التطبيقات المحملة على الجهاز. |
| CLEAR_APP_USER_DATA |
السماح للتطبيق بمسح معلومات المستخدم. |
| CONTROL_LOCATION_UPDATES |
السماح للتطبيق بتفعيل أو إلغاء التفعيل لتنبيهات المكان في الراديو. |
| DELETE_PACKAGES |
السماح للتطبيق بمسح الحزم. |
| FLASHLIGHT |
السماح بالتحكم بضوء الفلاش |
| GET_ACCOUNTS |
السماح للتطبيق بالدخول إلى قائمة الحسابات في الجهاز |
| GET_PACKAGE_SIZE |
السماح للتطبيق بمعرفة حجم الحزمة الخاصة بأي تطبيق |
| GET_TASKS |
السماح للتطبيق بمعرفة المهام التي تعمل حالياً مع معلومات لكل مهمة |
| INJECT_EVENTS |
السماح للتطبيق بإدخال أوامر معينة (ضغطة زر، لمس الشاشة) برمجياً (أي ليس من قبل المستخدم). |
| INTERNET |
السماح للتطبيق باستعمال الانترنت |
| KILL_BACKGROUND_PROCESSES |
السماح للتطبيق بإنهاء الخدمات التي تعمل في الخلفية واستدعاء دالة |
| MANAGE_ACCOUNTS |
السماح للتطبيق بالتحكم بالحسابات في الجهاز |
| MODIFY_AUDIO_SETTINGS |
السماح للتطبيق بتعديل الصوت في الجهاز |
| MODIFY_PHONE_STATE |
السماح للتطبيق بتعديل حالة الجهاز |
| PROCESS_OUTGOING_CALLS |
السماح للتطبيق بمراقبة، تعديل أو إلغاء الاتصالات |
| READ_CALENDAR |
السماح للتطبيق بقراءة معلومات التقويم |
| READ_CONTACTS |
السماح للتطبيق بقراءة جهات الاتصال |
| READ_HISTORY_BOOKMARKS |
السماح للتطبيق بقراءة (وليس إضافة) تاريخ المتصفح والعلامات المرجعية |
| READ_INPUT_STATE |
السماح للتطبيق بقراءة حالة مفاتيح الكتابة |
| READ_PHONE_STATE |
السماح للتطبيق بقراءة حالة الجهاز |
| READ_PROFILE |
السماح للتطبيق بقراءة معلومات المستخدم. |
| READ_SMS |
السماح للتطبيق بقراءة الرسائل النصية SMS |
| READ_SOCIAL_STREAM |
السماح للتطبيق بقراءة المشاركات الاجتماعية للمستخدم. |
| RECEIVE_MMS |
السماح للتطبيق بمراقبة رسائل الملتيميدا القادمة لتسجيلها أو التحكم بها. |
| RECEIVE_SMS |
السماح للتطبيق بمراقبة الرسائل النصية القادمة لتسجيلها أو التحكم بها. |
| RECORD_AUDIO |
السماح للتطبيق بتسجيل الصوت. |
| SEND_SMS |
السماح للتطبيق بإرسائل رسائل نصية |
| SET_TIME |
السماح للتطبيق بتغيير الوقت |
| SET_WALLPAPER |
السماح للتطبيق بتغير صورة الخلفية |
| STATUS_BAR |
السماح للتطبيق بفتح، إغلاق أو تعطيل شريط التنبيهات والأيقونات الموجودة داخله. |
| VIBRATE |
السماح للتطبيق باستعمال الرجّاج (Vibrator) |
| WAKE_LOCK |
السماح للتطبيق باستعمال PowerManager WakeLocks لمنع الجهاز من الدخول إلى وضع الاستعداد، أو إيقاف المعالج (في حالة أردت تشغيل ملف صوتي مثلاً). |
| WRITE_CALENDAR |
السماح للتطبيق بالكتابة في تقويم المستخدم |
| WRITE_CONTACTS |
السماح للتطبيق بإضافة معلومات إلى جهات الإتصال |
| WRITE_EXTERNAL_STORAGE |
السماح للتطبيق بإضافة بيانات إلى الذاكرة الخارجية للجهاز |
| WRITE_HISTORY_BOOKMARKS |
السماح للتطبيق بإضافة معلومات إلى تاريخ المتصفح أو العلامات المرجعية |
| WRITE_PROFILE |
السماح للتطبيق بالكتابة في معلومات المستخدم |
| WRITE_SETTINGS |
السماح للتطبيق بتعديل إعدادات النظام |
| WRITE_SMS |
السماح للتطبيق بكتابة رسائل نصية |
| WRITE_SOCIAL_STREAM |
السماح للتطبيق بالكتابة في الشبكات الاجتماعية الخاصة بالمستخدم. |
وأخيراً يمكن استعمال هذا الكود داخل ملف AndroidManfiest.xml لطلب التصاريح، حيث يحتوي على معظم التصاريح:
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCOUNT_MANAGER" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.BATTERY_STATS" /> <uses-permission android:name="android.permission.BIND_APPWIDGET" /> <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> <uses-permission android:name="android.permission.BIND_INPUT_METHOD" /> <uses-permission android:name="android.permission.BIND_REMOTEVIEWS" /> <uses-permission android:name="android.permission.BIND_WALLPAPER" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BRICK" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" /> <uses-permission android:name="android.permission.BROADCAST_SMS" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.BROADCAST_WAP_PUSH" /> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CLEAR_APP_CACHE" /> <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" /> <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> <uses-permission android:name="android.permission.DELETE_CACHE_FILES" /> <uses-permission android:name="android.permission.DELETE_PACKAGES" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> <uses-permission android:name="android.permission.DIAGNOSTIC" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.DUMP" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> <uses-permission android:name="android.permission.FACTORY_TEST" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.FORCE_BACK" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.GET_PACKAGE_SIZE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GLOBAL_SEARCH" /> <uses-permission android:name="android.permission.HARDWARE_TEST" /> <uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.MANAGE_APP_TOKENS" /> <uses-permission android:name="android.permission.MASTER_CLEAR" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> <uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS" /> <uses-permission android:name="android.permission.READ_INPUT_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.READ_SYNC_STATS" /> <uses-permission android:name="android.permission.REBOOT" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_MMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.REORDER_TASKS" /> <uses-permission android:name="android.permission.RESTART_PACKAGES" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER" /> <uses-permission android:name="android.permission.SET_ALARM" /> <uses-permission android:name="android.permission.SET_ALWAYS_FINISH" /> <uses-permission android:name="android.permission.SET_ANIMATION_SCALE" /> <uses-permission android:name="android.permission.SET_DEBUG_APP" /> <uses-permission android:name="android.permission.SET_ORIENTATION" /> <uses-permission android:name="android.permission.SET_POINTER_SPEED" /> <uses-permission android:name="android.permission.SET_PROCESS_LIMIT" /> <uses-permission android:name="android.permission.SET_TIME" /> <uses-permission android:name="android.permission.SET_TIME_ZONE" /> <uses-permission android:name="android.permission.SET_WALLPAPER" /> <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" /> <uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" /> <uses-permission android:name="android.permission.STATUS_BAR" /> <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" /> <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.USE_SIP" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_GSERVICES" /> <uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
أتمنى أن أسمع آراءكم وتعليقاتكم على المدونة


مجهود تشكر عليه اخي عبدالقهار ,
اتمنى منك مراسلتي على الايميل .