مشخصات پروژه
-
2
-
0.0
-
7797
-
0
-
1
معرفی و توضیح کامپوننت ها در اندروید
کامپوننت های برنامه کامپوننت های برنامه، ضرروی ترین بلوک های ساختمانی در ساخت برنامه های کاربردی می باشند. هر کامپوننت دارای خصوصیاتی است که از آن طریق می توانیم درخواست های خود را به سیستم عامل و دستگاه اندرویدی مان اعلام نماییم. ضرورتا همه ی کامپوننت ها دریافت کننده دستورات کاربر نیستند و در بعضی مواقع وابسته به یکدیگر می باشند اما هر کدام از آنها نقش مستقل خود را ایفا می کنند.
دوره آموزش اندروید
دوره آموزش برنامه نویسی اندروید
با عرض سلام و خسته نباشید به شما دانشجویان محترم آموزشگاه تحلیلگر داده ها. در این مقاله قصد داریم فایلی بسیار مهم به نام AndroidManifest.cml را به شما دانشجویان معرفی نماییم
اهداف پروژه :
در این مقاله ما قصد داریم مطالب زیر را برای شما شرح دهیم:
معرفی فایل مهم و کاربردی AndroidManifest.xml
معرفی و توضیح کامپوننت ها در اندروید
کامپوننت های برنامه
کامپوننت های برنامه، ضرروی ترین بلوک های ساختمانی در ساخت برنامه های کاربردی می باشند. هر کامپوننت دارای خصوصیاتی است که از آن طریق می توانیم درخواست های خود را به سیستم عامل و دستگاه اندرویدی مان اعلام نماییم. ضرورتا همه ی کامپوننت ها دریافت کننده دستورات کاربر نیستند و در بعضی مواقع وابسته به یکدیگر می باشند اما هر کدام از آنها نقش مستقل خود را ایفا می کنند.
از آنجا که کامپوننت ها مستقل از یکدیگر می باشند، با استفاده از آنها قادریم رفتار کلی برنامه را مشخص نماییم.
چهار نوع مختلف از کامپوننت ها وجود دارد. هر نوع در خدمت یک هدف مشخص می باشد و چرخه حیات مخصوص به خود را دارد که معلوم می نماید که کامپوننت چگونه ایجاد می گردد و چگونه از بین میرود.
در ادامه به معرفی 4 نوع کامپوننت می پردازیم:
اکتیویتی ها: اکتیویتی بیانگر یک صفحه نمایشگر به همراه یک واسط کاربری است. بعنوان مثال، یک برنامه چک کردن ایمیل را در نظر می گیریم. در این برنامه ممکن است یک اکتیویتی برای نمایش دادن لیست ایمیل های جدید داشته باشیم، یک اکتیویتی دیگر برای نوشتن و ارسال ایمل داشته باشیم و یک اکتیویتی دیگر برای خواندن ایمیل ها داشته باشیم که هرکدام مستقل از دیگری کار میکنند. بدین ترتیب، یک برنامه مجزا میتواند با هرکدام از این اکتیویتی ها ارتباط برقرار نماید. « اگر برنامه ایمیل اجازه اینکار را به ما بدهد »
هر اکتیویتی یک زیرکلاس از کلاس Activity می باشد.
سرویس ها: یک سرویس کامپوننتی است که در پس زمینه دستگاه اندرویدی مان اجرا می گردد تا یک کاری را برای مدت طولانی و یا کاری را برای یک فرایند از راه دور انجام دهد. سرویس مانند اکتیویتی واسط گرافیکی ندارد. بعنوان مثال، یک سرویس میتواند موزیکی را در پس زمینه اجرا نماید درحالیکه ما مشغول کار با برنامه دیگری می باشیم و یا سرویس مشغول ارسال دریافت دیتا در شبکه می باشد درحالیکه ما مشغول انجام کار دیگری می باشیم.
هر سرویس یک زیرکلاس از کلاس Service می باشد.
تامین کننده محتوا « Content Providers »: یک تامین کننده محتوا به مدیریت دیتاهای به اشتراک گذاشته شده در برنامه می پردازد. دیتا ها میتوانند به روش های مختلفی ذخیره گردند. مثلاً در فایل، دیتابیس SQLit، وب و یا هر فضای موجود که برنامه توان دسترسی به آنرا داشته باشد. از طریق تامین کننده محتوا، سایر برنامه ها میتوانند به جستجو و تغییر دیتاهای موجود بپردازند. « اگر تامین کننده محتوا اجازه دهد » بعنوان مثال، در سیتم اندروید تامین کننده محتوایی قرار گرفته است که به مدیریت اطلاعات تماس کاربر می پردازد. بنابراین، هر برنامه ای با مجوز مناسب میتواند به اطلاعات تماس دسترسی پیدا نماید و در آن به جستجو بپردازد.
همچنین تامین کنندگان محتوا برای خواندن و نوشتن در فایل ها مناسب می باشند. زیرا ممکن است این فایل برای برنامه مان خصوصی باشد و قرار نباشد به اشتراک گذاشته شود. به عنوان مثال، برنامه نمونهNotepad از تامین کننده محتوا به منظور ذخیره سازی فایل استفاده می نماید.
تامین کننده محتوا زیرکلاسی از کلاس ContentProvider می باشد و می بایست مجموعه ای از API ها را به منظور انجام ترنزاکشن ها اجرا نماید.
دریافت کننده های اعلانات « Broadcast receivers »: یک دریافت کننده اعلانات کامپوننتی می باشد که به پخش اعلانات همگانی سیستم پاسخ میدهد. بعنوان مثال، یک اعلان اعلام میکند که صفحه نمایش خاموش است، باتری کم است یا عکس گرفته شد. همچنین برنامه ها قابلیت راه اندازی اعلانات را دارا می باشند. بعنوان مثال، اجازه دهند تا برنامه های دیگر بدانند که فرضا دیتاهای مورد نظر در دستگاه اندرویدی مان دانلود شده است و برای آنها قابل استفاده می باشد. اگرچه دریافت کننده های اعلانات واسط گرافیکی ندارند، اما می توانند نوار وضعیتی برای خود داشته باشند تا کاربر را زمانیکه اتفاقی رخ داد، با خبر سازند. معمولاً، دریافت کننده اعلانات مانند یک دروازه برای سایر برنامه ها می باشد و برای انجام کار های بسیار کوچک در نظر گرفته می شود. بعنوان نمونه، ممکن است سرویسی را راه اندازی نماید تا بسته به اتفاقی کاری را انجام دهد.
یک دریافت کننده اعلانات بعنوان زیر کلاسی از کلاس BroadcastReceiver می باشد و هر اعلان بصورت یک شیء Intent به این کلاس تحویل داده می گردد.
یکی از خصوصیات بسیار جالب اندروید این است که هر برنامه ای قادر به اجرای کامپوننت برنامه ای دیگر است. بعنوان مثال، اگر بخواهیم کاربر قادر باشد تا بوسیله دوربین دستگاه اندرویدی تصویری ثبت نماید، بجای آنکه خود برنامه ای بنویسد تا این عمل را انجام دهد، ممکن است برنامه دیگری وجود داشته باشد که این کار را برای او انجام دهد و او از نتیجه آن استفاده کند. احتیاجی به کد نوشتن و لینک کردن برنامه ها نیست. بجای آن خیلی راحت میتوانیم اکتیویتی مورد نظرمان را اجرا کنیم تا عمل عکسبرداری را انجام دهد. وقتی عکس گرفته شد، عکس به برنامه ما تحویل داده خواهد شد تا هر طور که نیاز داریم از آن استفاده نماییم. از دید کاربر، دوربین و عمل عکسبرداری بخشی از برنامه ما می باشد که اجرا شده است.
وقتی سیستم کامپوننتی را اجرا می نماید، خط پردازش برنامه آغاز می گردد « اگر تا کنون اجرا نشده باشد » و کلاس های مورد نیاز برای اجرای برنامه فراخوانی می گردند. بعنوان مثال، اگر برنامه ما اکتیویتی برنامه دوربین را اجرا نماید تا عکس بگیرد، اکتیویتی در خط پردازشی قرار می گیرد که متعلق به برنامه عکسبرداری است، نه در خط پردازش برنامه ما. بنابراین، برخلاف انجام پردازش ها در سایر سیستم عامل های دیگر، برنامه های اندروید یک نقطه شروع معین ندارند.
از آنجایی که سیستم عامل، اجرای هر برنامه را در خط پردازش مجزا از برنامه های دیگر انجام می دهد و هر برنامه ممکن است مجوز های مختلف داشته باشند، برنامه ما نمی تواند بطور مستقیم کامپوننتی از دیگر برنامه ها را اجرا نماید. اما سیستم عامل اندروید می تواند این کار را برای ما انجام دهد. بنابراین، برای اجرای اکتیویتی برنامه ای دیگر، باید پیامی به سیستم عامل اندروید ارسال نماییم تا قصد ما برای اجرای آن کامپوننت خاص را معلوم نماید. سیستم عامل اندرویدکامپوننت مورد نظر را برایمان اجرا می نماید.
اجرای کامپوننت ها
سه نوع از چهار نوع کامپوننت ها « اکتیویتی ها، سرویس ها و دریافت کننده ها » با پیام هایی که به Intent معروفند، اجرا می گردند. Intent کامپوننت ها را در زمان اجرا به یکدیگر متصل می نماید. اینطوری میتوانیم فکر نماییم که یک کامپوننت یک درخواست را ارسال کرده و منتظر جواب می ماند، خواه کامپوننت مربوط به برنامه ما باشد یا نباشد.
یک اینتنت با ساخت یک شیء از کلاس Intent بوجود می آید. با این کار پیامی تعریف می گردد که بوسیله آن میتوان یک کامپوننت خاص یا نوع خاصی از کامپوننت را فعال نمود. یک اینتنت به ترتیب می تواند صریح یا ضمنی « explicit or implicit » باشد.
در اکتیویتی ها و سرویس ها، یک اینتنت معرف عملی برای اجر می باشد. بعنوان مثال برای دیدن و یا ارسال یک چیزی. و ممکن است چیزی را معرفی نماید که کامپوننت برای اجرا به آن نیاز داشته باشد. بعنوان مثال، اینتنت ممکن است درخواستی را به یک اکتیویتی ارسال نماید که آن اکتیویتی یک تصویری را نمایش دهد یا یک صفحه وبی را باز نماید. در بعضی موارد، میتوانیم یک اکتیویتی را اجرا نماییم تا یک نتیجه ای را دریافت نماییم، که در اینصورت، اکتیویتی نیز نتیجه را درغالب یک اینتنت به ما برگشت خواهد داد. بعنوان مثال، میتوانیم یک اینتنت ارسال نماییم تا کاربر شماره تماس مورد نظرش را انتخاب کرده و این شماره به ما برگشت داده شود.
در نوع آخر کامپوننت، تامین کننده های محتوا، توسط اینتنت اجرا نمی گردند. بلکه زمانی فعال می گردند که درخواستی از یکContentResolver برسد. وظیفه ContentResolver سر و سامان دادن به ترنزاکشن های ارسالی یک تامین کننده محتوا می باشد. این کار به امنیت ارسال و دریافت دیتا کمک می نماید زیرا یک سطح دسترسی عادی بین تامین کننده محتوا و کامپوننت درخواست دهنده را حذف نموده است.
متدهای مختلفی به منظور اجرای هر نوع کامپوننت وجود دارد:
یک اکتیویتی با ارسال یک اینتنت بهstartActivity و یا startActivityForResult اجرا می گردد. « زمانی که می خواهیم اکتیویتی یک نتیجه را به ما برگرداند. »
یک سرویس با ارسال یک اینتنت به startService یا bindService اجرا می گردد.
یک اعلان توسط ارسال یک اینتنت به متد هایی مانندsendBroadcast ، sendOrderedBroadcast، sendStickyBroadcast آماده سازی می گردند.
با فراخوانی متدquery در یک ContentResolver میتوان در یک تامین کننده محتوا پرس و جو انجام داد.
فایل مانیفست
قبل از آن که سیستم عامل اندروید قادر به اجرای یک کامپوننت باشد، سیستم عامل باید بداند که کامپوننتی وجود دارد . این کار با خواندن فایلی بنام AndroidManifest.xml که معروف به فایل مانیفست می باشد، صورت می گیرد. برنامه ما باید تمام کامپوننت ها را در این فایل معرفی نماید. آدرس این فایل، دایرکتوری اصلی پروژه هایمان می باشد. مانیفست شامل قسمت های مختلفی است که کامپوننت ها هم در یکی از این قسمت ها می بایست معرفی گردند. چند نمونه از مواردی که می بایست معرفی گردند در ادامه آورده شده است:
تعریف هر مجوزی که کاربر برای کار با برنامه به آن نیاز داشته باشد، مانند دسترسی به اینترنت یا درخواست دسترسی به اطلاعات تماس کاربر.
تعریف حداقل سطح دسترسی APIبرنامه، بسته به آنکه برنامه از چه APIاستفاده می نماید.
تعریف خصوصیات سخت افزاری و نرم افزاری که توسط برنامه مورد استفاده قرار می گیرند. مانند: دوربین، بلوتوث و صفحه مولتی تاچ
کتابخانه های API استفاده شده در برنامه مانند استفاده از Google Maps library و موارد دیگر.
تعریف کامپوننت
مهمترین وظیفه فایل AndroidManifest آگاه نمودن سیستم عامل اندروید از وجود کامپوننت های برنامه می باشد. بعنوان مثال کد زیر نحوه تعریف یک کامپوننت را در فایل AndroidManifest.xml را نشان می دهد. (شکل 1)
شکل 1
تمامی کامپوننت های به کار رفته شده در پروژه های اندروید می بایست در امان <application> تعریف شوند. کامپوننتی که در عکس فوق تعریف گردیده یک اکتیوتی می باشد. این عمل توسط المان <activity> صورت گرفته است.
در المان <application>، صفت android:icon اشاره به یکی از منابع پروژه که در اینجا یک آیکون می باشد می نماید تا برای برنامه یک آیکون تعریف نماید و صفت های android:label و android:theme نیز به تریتیب برای تعریف نمودن نام کلی برنامه و قالب ظاهری کل برنامه مورد استفاده قرار گرفته اند.
در المان <activity>، صفتandroid:name ، اسم کلاس اکتیویتی را مشخص می نماید و صفت android:label رشته ای تعریف می نماید که به کاربر نشان داده می گردد و این رشته به نام اکتیوتی اصلی برنامه اشاره می نماید.
تمام کامپوننت های برنامه می بایست به طریق زیر معرفی گردند:
<activity> المان های اکتیویتی ها
<service> المان های سرویس ها
<receiver> المان های دریافت کننده های اعلانات
<provider> المان های تامین کننده محتوا
اکتیویتی ها، سرویس ها و تامین کنندگان محتوا که در سورس برنامه مورد استفاده قرار گرفته اند ولی در فایل AndroidManifest تعریف نشده اند، برای سیستم عامل اندروید قابل شناسایی نمی باشند، در نتیجه، هرگز اجرا نمی کردند. اما، دریافت کننده اعلانات علاوه بر آنکه می تواند در فایل AndroidManifest تعریف گردد، بطور داینامیک نیز می تواند در کد برنامه ساخته گردد. بعنوان یک شیء از کلاسBroadcastReceiver تعریف شده و با فراخوانی متد registerReceiver در سیستم عامل اندروید ثبت گردد.
در عکس بالا المان و صفت های دیگری نیز وجود دارد که در ادامه به توضیح مختصر آنها می پردازیم:
صفت package: نامی که برای پکیج برنامه خود در زمان ایجاد آن تعریف نموده ایم و در کلاس های مختلف برنامه مان مورد استفاده قرار داده ایم در این فایل قرار می گیرد. علت آن این است که نام این پکیج به منزله یک معرف منحصر به فرد از برنامه برای سیستم عامل اندروید می باشد و برنامه های دیگر سیستم عامل اندروید می توانند با استفاده از این نام به برنامه ما دسترسی پیدا نموده و از قابلیت های آن استفاده نمایند.
صفت android:versionCode: این صفت یک عدد است و کاربرد این عدد برای کاربران برنامه نوشته شده نمی باشد بلکه برای برنامه بازار وGoogle Play است تا از طریق این عدد از یک سو خود برنامه را شناسایی نمایند و از سوی دیگر بروز رسانی های برنامه را پیگیری نمایند. به عبارت دیگر کاربران به هیچ وجه این کد را مشاهده نخواهند کرد. نکته ای که برای تعیین شماره Version Code همواره می بایست مد نظر قرار داد این است که این شماره از هر عددی می تواند شروع گردد اما همواره پس از بروز رسانی نمودن برنامه خود این عدد می بایست نسبت به نسخه قبلی عدد بزرگ تری باشد. به طور مثال اگر نسخه اول برنامه مان دارای Version Code یی معادل با 1 بود نسخه بعدی پس از بروز رسانی برنامه می بایست مثلا معادل با 2 باشد.
صفت android:versionName: این صفت نامی از نسخه برنامه می باشد که برای کاربران نمایش داده می شود. نحوه نامگذاری Version Name می تواند بر اساس استراتژیی باشد که توسعه دهنده برنامه برای برنامه هایش در نظر می گیرد. به طور مثال می توان Version Name را بر اساس تاریخ انتشار برنامه در نظر گرفت.
المان <uses-sdk>: در زمان ایجاد نمودن یک پروژه اندرویدی مقدار حداقل نسخه سیستم عامل اندروید و همچنین نسخه ای که قصد نوشتن برنامه مان با آنرا داریم تعیین می نمایم. این دو تنظیمات در فایل AndroidManifest درج می گردد. علت آن نیز به این خاطر می باشد که چنانچه ما برنامه ای طراحی نماییم که برای نسخه Gingerbread یا نسخه 3.0 طراحی شده باشد، این حداقل نسخه مورد نیاز برای اجرای این برنامه یا همان Minimum SDK در فایل AndroidManifest ذکر خواهد شد و چنانچه کاربری که سیستم عامل اندروید وی پایین تر از نسخه 3.0 باشد و بخواهد برنامه طراحی شده ما را استفاده نماید در حین نصب فایل AndroidManifest این مسئله را خواهد فهمید و از نصب برنامه جلوگیری به عمل خواهد آورد.
المان ها و صفت های مختلف زیاد دیگری وجو دارند که در فایل AndroidManifest تعریف می گردند که در مقالات بعدی و در جای مناب خود توضیح داده خواند شد.
در اینجا کار ما به اتمام میرسد. امیدواریم نهایت استفاده از این مقاله را برده باشید.
شاد و پیروز باشید.