Android Permissions

يتمتع نظام تشغيل أندرويد بوسائل أمان خاصة كي تحمي مستخدميه من مخاطر سرقة البيانات أو العبث في الهاتف دون علم المستخدم، وذلك عن طريق عزل كل تطبيق داخل صندوق خاص به لا يستطيع أن يرى أو يتعامل مع الموارد الخاصة بالتطبيقات الأخرى ما لم تكن لديه الأذونات الخاصة لذلك وموافقة المستخدم عليها.
بشكل افتراضي لا يملك التطبيق أي أذونات للوصول لأي شيء خارج التطبيق كاستخدام الكاميرا أو الاتصال بأحد جهات الاتصال في الهاتف ما لم يتم تضمين الأذونات الخاصة بذلك داخل التطبيق ثم موافقة المستخدم عليه.

 

فعند تنصيب التطبيق من متجر Play يطلب من المستخدم الموافقة على أذونات محددة يحتاجها التطبيق كي يعمل وبعد الموافقة عليها يبدأ التطبيق في التحميل والتنصيب، لذا يُنصح دائمًا بقراءة هذه الأذونات بعناية والتأكد من احتياج التطبيق لها ليؤدي وظيفته المطلوبة دون الخوف من الوصول لأشياء لا يحتاجها وذلك لكثرة وجود البرمجيات الخبيثة التي تستغل موافقتك على الأذونات للعبث بموارد ومعلومات هاتفك.

 

في هذا المثال سنتعرف على كيفية صنع تطبيق يطلب الوصول إلى أذونات معينة من المستخدم كي يؤدي وظيفته، يقوم هذا التطبيق بدور المصباح اليدوي حيث يُضيء الضوء الخاص بالكاميرا (Flashlight) بشكل برمجي عند الضغط على زر بداخله.

 

نبدأ بصنع واجهة المستخدم الخاصة بالتطبيق، وتتكون من زر من النوع  ImageButton

بعد ذلك نقوم بالتعديل في ملف AndroidManifest.xml وإضافة الأذونات المطلوبة لكي نستطيع التحكم في ضوء الكاميرا

</”uses-permission android:name=”android.permission.CAMERA>
</”uses-feature android:name=”android.hardware.Camera>

باستخدام الوسم الخاص بالأذونات <uses-permissions> وتحديد الاسم الخاص به في الخاصية android:name، وأيضًا إضافة الوسم <uses-feature> لإعلام الهاتف أن التطبيق يحتاج إلى وجود كاميرا كي يعمل.
ويوجد العديد من الأذونات التي تمكنك من القيام بالعديد من المهام من داخل التطبيق كالاتصال بالإنترنت أو القراءة والكتابة في الذاكرة ويمكنك التعرف عليها من هنا ويتم تعريفها داخل الملف AndroidManifest.xml كما سبق.
إذا لم يتم تعريف الأذونات المستخدمة في التطبيق داخل ملف AndroidManifest.xml فإن التطبيق لن يعمل.

 

ننتقل الآن إلى كتابة كود التحكم الخاصة بالتطبيق في ملف MainActivity.java  وتنقسم إلى
1-التأكد من توفر ضوء للكاميرا في الهاتف أولًا.

if(!getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))    finish();

وإذا لم يتواجد ضوء الكاميرا في الهاتف فسيتم غلق التطبيق في الحال.
2-الحصول على كائن يُمكننا من التحكم في ضوء الكاميرا وذلك عن طريق فتح الكاميرا ثم الحصول على الخصائص والمعاملات الخاصة بها وتغيير المتغير الخاص بضوء الكاميرا.

;()camera = Camera.open
;()param = camera.getParameters

 

3-برمجة الزر المتواجد في الواجهة الرئيسية لكي يُضيء ضوء الكاميرا عند الضغط عليه ويغلقه عن الضغط مرة أخرى. عن طريق كتابة دالتين turnONTorch()  وTurnOFFTorch() 

 

}(if(!isTorchON
;()turnONTorch
{
}else
;()turnOFFTorch
}

يتبقى تعريف ما هي الوظيفة الخاصة بالدالة turnONTorch()  وTurnOFFTorch().
تقوم الدالة turnONTorch() بتشغيل الضوء وذلك عن طريق تمرير المعامل FLASH_MODE_TORCH كإحدى معاملات الكاميرا ثم تفعيل الكاميرا بالمعاملات الجديدة عند استدعاء startPreview()

 }()private void turnONTorch
;(param.setFlashMode(Parameters.FLASH_MODE_TORCH
;(camera.setParameters(param
;()camera.startPreview
;isTorchON = true
;(btn.setImageResource(R.drawable.power_off
{

وبالمثل نبني turnOFFTorch() كي يتم إطفاء الضوء.

 }()private void turnOFFTorch
;(param.setFlashMode(Parameters.FLASH_MODE_OFF
;(camera.setParameters(param
;()camera.startPreview
;isTorchON = false
;(btn.setImageResource(R.drawable.power_on

بعد ذلك نقوم بتجربة التطبيق على هاتف حقيقي وليس  emulatorحيث لا يمكنه إضاءة ضوء الكاميرا.