مشخصات پروژه
-
1042
-
0.0
-
9562
-
0
-
1
نحوه کار کردن با Broadcast Receiver در اندروید
در این مقاله قصد داریم تا نحوه کار کردن با Broadcast Receiver را برای شما توضیح دهیم. اهداف پروژه : در این پروژه ما قصد داریم اهداف زیر را پیاده سازی نماییم: 1.نمایش شماره تلفن تماس گیرنده در یک کادر پیام
رمز فایل :tahlildadeh.com
دوره آموزش اندروید
دوره آموزش برنامه نویسی اندروید
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد .
با عرض سلام و خسته نباشید به شما دانشجویان محترم آموزشگاه تحلیلگر داده ها. در این مقاله قصد داریم تا نحوه کار کردن با Broadcast Receiver را برای شما توضیح دهیم.
اهداف پروژه :
در این پروژه ما قصد داریم اهداف زیر را پیاده سازی نماییم:
1. نمایش شماره تلفن تماس گیرنده در یک کادر پیام
نکته
اگر با کامپوننت Broadcast Receiver آشنایی ندارید، پیشنهاد می شود که ابتدا مقاله Introduction To Broadcast Receiver را مطالعه بفرمایید.
برای شروع کار ابتدا می بایست یک پروژه جدید در محیط Eclipse ایجاد نماییم. برای این منظور از منوی File زیر منوی New و سپس زیر منوی Android Application Project را انتخاب می نماییم. (شکل 1)
شکل 1
همچنین برای ساده تر شدن و بالا بردن سرعت کار می توانید از منوی ابزار ها، منوی New و سپس Android Aplication Project را انتخاب نمایید.(شکل 2)
شکل 2
با انجام هر دو روش پنجره جدیدی با عنوان New Android Application باز می گردد. (شکل 3)
شکل 3
در این پنجره قسمت هایی وجود دارد که در زیر به توضیح آنها می پردازیم :
Aplication Name : در این فیلد می بایست نام برنامه خود را وارد نمایید. توجه داشته باشید که هر مقداری را که در این فیلد وارد نمایید، برنامه با این نام در لیست برنامه های نصب شده قرار خواهد گرفت.
در این فیلد می توانید یک رشته فارسی نیز وارد نمایید.
Project Name : در این فیلد می بایست نام کلی پروژه خود را وارد نمایید و بهتر است که یک رشته با معنا و مرطبت با برنامه خود وارد نمایید.
زمانی که مقدار فیلد Aplication Name را وارد می نمایید، فیلد Project Name نیز بصورت خودکار همان نام را وارد می نماید. توجه داشته باشد که اگر فیلد Aplication Name را با یک رشته فارسی مقداردهی نمودید، برای جلوگیری از خطاها می بایست رشته فارسی تولید شده در فیلد Project Name را با یک رشته معادل انگلیسی جایگزین نمایید.
Package Name : در این فیلد می بایست پکیج پروژه خود را تعیین نمایید که بهتر است آدرس وب سایت خود را بدون درج http و www و بصورت از آخر به اول و به همراه نام وارد شده در فیلد Project Name وارد نمایید. این نوع مقداردهی به برنامه های مارکت نظیر بازار و Google Paly این امکان را میدهد تا زمانی که نسخه جدیدی از برنامه شما ساخته و آماده منتشر گردید باخبر شده و نسخه جدید برنامه تان را جایگزین نسخه قبلی نماید.
Minimum Required SDK : در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که برنامه تان به چه حداقل نسخه ای از سیستم عامل اندروید نیاز دارد. برای مثال اگر گزینه API 14 را انتخاب نمایید، برنامه تان در سیستم عامل اندروید پایین تر از اندروید 4 یا همان IceCream Sandwich، نصب و اجرا نمی گردد.
اگر از امکانات خاص نسخه های جدیدتر سیستم عامل اندروید استفاده نمی نمایید پیشنهاد می گردد که API 8 را انتخاب نمایید. چرا که با انتخاب این نسخه از سیستم عامل اندروید مطمئن خواهید بود که برنامه شما در تمامی گوشی ها و تبلت ها اجرا خواهد شد.
Target SDK : در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که بالاترین نسخه اندرویدی که برنامه شما می تواند در آن نصب و اجرا گردد کدام نسخه است. بدیهی ست که هرچه سطح API انتخاب شده بالاتر باشد، گوشی ها و تبلت های جدید نیز می توانند از برنامه شما استفاده نمایند.
Compile With : در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که برنامه Eclipse از کدام نسخه از سیستم عامل اندروید برای نوشتن کلاس های
برنامه و همچنین کامپایل و تست نمودن آن استفاده نماید.
Theme : در این لیست می توانید یک Theme برای برنامه خود انتخاب نمایید.
توجه داشته باشید زمانی که مقدار Compile With را کمتر از API 14 انتخاب نمایید، از این قسمت نمی توانید استفاده نمایید و می بایست از لیست موجود گزینه None رو انتخاب نمایید.
پس از مقداردهی نمودن فیلد های ذکر شده بر روی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 4)
شکل 4
در مرحله بعدی اگر گزینه Create custom lunche icon را انتخاب نمایید، برنامه Eclipse به شما اجازه میدهد تا برای برنامه خود یک عکس جهت ساختن icon انتخاب و یا با استفاده از ابزار های خود برنامه Eclipse، icon مورد نظر خود را ترسیم نمایید. توجه داشته باشید که در صورت عدم انتخاب این گزینه، صفحه مربوطه برای شما باز نخواهد شد.
همچنین اگر گزینه Create Activity را انتخاب نمایید، برنامه Eclipse به شما اجازه میدهد که نام و نوع activity برنامه تان را انتخاب نمایید.
این دو گزینه را انتخاب می نماییم و سایر گزینه ها را به حالت پیش فرض خود می گذاریم. حال مجددا بروی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 5)
شکل 5
در مرحله بعدی می توانید برای برنامه خود یک icon انتخاب و یا رسم نمایید.
دکمه image برای انتخاب یک عکس ترجیحا با فرمت png به عنوان icon برنامه
دکمه Clipart برای انتخاب یک clipart « شکلک » به عنوان icon برنامه
دکمه Text برای ورود یک نوشته به عنوان icon برنامه
مورد استفاده قرار می گیرند.
ما دکمه image را انتخاب و پس از انتخاب کردن عکس مورد نظر به عنوان icon برنامه بر روی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 6)
شکل 6
در مرحله بعدی گزینه Create Activity را انتخاب می نماییم و از لیست موجود که بیانگر انتخاب نوع Activity برنامه می باشد گزینه Blank Activity را انتخاب می نماییم. (شکل 7)
شکل 7
در مرحله آخر نیز باید برای activity و layout خود یک نام انتخاب نمایید. ما نام انتخاب شده پیش فرض را قبول کرده و بر روی دکمه Finish کلیک می نماییم تا پروژه مان ساخته شود. (شکل 8)
شکل 8
تا اینجای کار ما پروژه خود را در برنامه Eclipse ایجاد نموده ایم. حال برای ادامه کار می بایست layout برنامه خود را طراحی نماییم.
برای این منظور یک TextView بر روی layout خود قرار می دهیم. (شکل 9)
شکل 9
همچنین مقادیر لازمه برای نمایش متن TextView ها را در فایل string.xml وارد می نماییم. (شکل 10)
شکل 10
حال در این مرحله می بایست کد های اصلی برنامه را در کلاس MainActivity وارد نماییم.
اولین کدی که می بایست به کلاس MainActivity اضافه نماییم متد onCreate می باشد. این متد یکی از متدهای اصلی برنامه و همچنین چرخه حیات برنامه های اندرویدی می باشد و زمانی که برنامه برای اولین بار اجرا می گردد و یا دستگاه اندرویدی ما از حالت portrait به حالت landscape و یا بر عکس تغییر می کند، این متد فراخوانی می گردد.
یکی از دستورات مهمی که باید به این متد اضافه شود دستور setContentView است. وظیفه این دستور به نمایش در آوردن layout برنامه می باشد.(شکل 11)
شکل 11
مقدار activity_main نام فایل xml مربوط به layout برنامه مان می باشد.
همچنین دستور savedInstanceState حالت جاری layout برنامه را ذخیره می نماید. به این معنا که، فرض نمایید بر روی layout خود یک ابزار EditText قرار داده اید و مقدار نام خودتان را درون آن وارد کرده اید. زمانی که حالت دستگاه اندرویدی خودتون را به landscape و یا portrait تغییر دهید مشاهده می نمایید که مقدار نام شما هنوز در EditText وجود دارد و پاک نشده است. دلیل آن به خاطر استفاده از دستور فوق می باشد.
در مرحله بعدی می بایست کلاسی را ایجاد نماییم تا زمانی که تماسی با ما گرفته شد کدهای مورد نظر ما اجرا شوند. برای این منظور، بر روی نام پروژه خود در پنجره Package Explorer کلیک راست می نماییم و از منوی باز شده منوی New و سپس منوی Class را انتخاب می نماییم. (شکل 12)
شکل 12
در پنجره باز شده و در قسمت Package، نام کامل پکیجی که مایل به اضافه شدن کلاس به آن هستیم را وارد می نماییم. برای راحتی کار نیز می توانیم بر روی دکمه Browse.. کلیک کرده و از پنجره باز شده پکیج مورد نظر را انتخاب نماییم. (شکل 13)
شکل 13
سپس در قسمت Name نام دلخواه خود برای کلاس را وارد می نماییم و در قسمت Superclass نیز نام کلاسی که می خواهیم از آن ارث بری نماییم وارد می نماییم. برای راحتی کار نیز می توانیم بر روی دکمه Browse.. کلیک کرده و از پنجره باز شده نام کلاس مورد نظر خود را در قسمت Choose a type وارد کرده و آنرا از لیست Matching items انتخاب نماییم. (شکل 14)
شکل 14
و در آخر بر روی دکمه Finish کلیک می نماییم تا کلاس مان در پکیج انتخاب شده ایجاد گردد.
بعد از ایجاد نمودن java class، کدهای مربوط به خواندن شماره تلفن تماس گیرنده را در آن وارد می نماییم. (شکل 15)
![]()
شکل 15
زمانی که کلاس را می سازیم، آرگومان های ورودی متد onReceive، به ترتیب arg0 و arg1 نام دارند که ما آنها را به دلخواه تغییر داده ایم.
زمانی که شخصی با ما تماس می گیرد، متد onReceive به طور خودکار فراخوانی می شود و کدهای مندرج در آن توسط سیستم عامل اندروید اجرا می شوند. در پارامترهای ورودی تابع onReceive، شی conetext به برنامه خودمان و شی intent نیز به برنامه ای از سیستم عامل اندروید که وظیفه مدیریت تماس ها را دارد، اشاره می کنند.
برای جلوگیری از crash شدن برنامه، کدهای مربوطه را در داخل بلاک try/catch قرار داده ایم. در خط ابتدایی بلاک try، وضعیت برنامه ای که مدیریت تماس ها در سیستم عامل اندروید را دارا می باشد، در متغییری با نام state ذخیره نمودیم.
کلاس TelephonyManager، کلاسی می باشد که با کمک آن می توانیم با قابلیت تماس ها در سیستم عامل اندروید، کار و برنامه نویسی نماییم.
برنامه ای که وظیفه مدیریت تماس ها در سیستم عامل اندوید را دارا می باشد، درحین تماس دارای سه وضعیت می باشد که عبارتند از:
1. EXTRA_STATE_RINGING : زمانی که شخصی با ما تماس می گیرد.
2. EXTRA_STATE_OFFHOOK : زمانی که تماس را پاسخ می دهیم.
3. EXTRA_STATE_IDLE : زمانی که تماس را قطع و یا رد می نماییم.
توجه داشته باشید که خروجی هر سه وضعیت ذکر شده، از نوع String می باشد.
به وسیله متد EXTRA_STATE از کلاس TelephonyManager، می توانیم به وضعیت جاری برنامه مدیریت تماس ها دسترسی پیدا نماییم.
سپس با استفاده از دستور شرطی if، چک نموده ایم که وضعیتی که در متغیر state ذخیره شده است برابر با Ringing « در حال برقراری تماس » می باشد یا خیر؟ در صورتی برقرار بودن شرط وارد بدنه دستور شرطی if می شویم و متغیری با نام incomingNumber و از نوع داده ای String تعریف می نماییم و مقدار اولیه آنرا برابر با شماره تلفن تماس گیرنده قرار می دهیم.
متد getStringExtra شئ intent، اطلاعاتی از برنامه ای که وظیفه مدیریت تماس ها را دارد، به صورت جفت کلید/مقدار باز می گرداند.
در خط بعدی متغیری با نام msg و از نوع String تعریف نموده ایم و مقدار متغیر state و incomingNumber را در آن قرار داده ایم.
در انتها نیز با استفاده از کلاس Toast، مقدار متغیر msg را در یک کادر کوچک، به کاربر نمایش می دهیم.
کلاس Toast کلاسی می باشد که برای نمایش دادن پیغام هایی « با توجه به اتفاقاتی که در طول اجرای برنامه رخ می دهد » به کاربر، مورد استفاده قرار می گیرد. این کلاس سه پارامتر ورودی دارد که مقداردهی کردن هر سه پارامتر الزامی می باشد. پارامتر اول، شئی از نوع Context و پارامتر دوم، پیغام مورد نظر جهت نمایش به کاربر و پارامتر سوم، مدت زمان به نمایش درآمدن کادر پیغام می باشد که می توان از دستور Toast.LENGTH_LONG و یا Toast.LENGTH_SHORT و یا یک عدد صحیح به میلی ثانیه باشد.
در صورتی که در حین اجرا نمودن کدهای نوشته شده با خطایی رو به رو شویم، در بلاک catch و با استفاده از کلاس Log، خطای تولید شده را به برنامه نویس اعلام می نماییم.
کلاس Log برای درج پیغام هایی در پنجره LogCat برای دیباگ نمودن پروژه های اندرویدی مورد استفاده قرار می گیرد. این کلاس دارای 6 متد مهم و کاربردی می باشد که عبارتند از : e، w، i، d، v، wtf. تمامی این متد ها دو پارامتر ورودی از نوع String دارند. پارامتر اول برای مشخص نمودن مقدار فیلد Tag و پارامتر دوم برای مشخص نمودن مقدار فیلد Text پنجره LogCat می باشد.
برای دسترسی به پنجره LogCat می بایست به منوی Window -> Show View -> Other… رفته و در پنجره باز شده، در کادر type filter text، عبارت LogCat را وارد نماییم و گزینه LogCat را انتخاب و بر روی دکمه OK کلیک نماییم.
تفاوت بین انواع Log ها:
1. Log.e
هنگام بروز یک خطا، این Log را به کار می بریم. منظورمان از خطا، عدم اجرا شدن دستوری مهم است. یعنی عملیاتی که مد نظرمان بوده است، اجرا نگردیده و یک خطا به وجود آمده است.
2. Log.w
زمانی به کار می رود که بخواهیم در مورد به وجود آمدن یک وضعیت، هشدار بدهیم. اگرچه وضعیت به وجود آمده، اختلال مهمی در روند اجرای کدها ایجاد نمی کند، ولی می بایست به صورت یک نکته مهم به برنامه نویس تذکر داده شود تا در صورت نیاز، موارد مربوط به آن را در کدنویسی های بعدی مد نظر قرار بدهد .
3. Log.i
برای نمایش اطلاعات مفیدی در زمینه اجرای بخش های مختلف برنامه اندروید به کار گرفته می شود. مثلا اگر کد شما در کل شامل 5 مرحله باشد، می توانید در انتهای اجرای هر مرحله، با Log.i، پیامی مبنی بر اجرای موفقیت آمیز هر مرحله، در LogCat نمایش بدهید.
4. Log.d
برای خطایابی برنامه اندروید به کار گرفته می شود. « اگر زمانی با خطا روبرو شویم، با پیام های نوشته شده توسط Log.d می توانیم علت ایجاد خطا را پیدا نماییم »
5. Log.v
برای نمایش تمامی نکات کوچک و بزرگ از اجرای برنامه اندروید، در قسمت LogCat ، به کار گرفته می شود.
6. Log.wtf
مشابه Log.e می باشد، اما برای مواردی به کار گرفته می شود که یک خطای خیلی مهم رخ داده باشد که با وقوع آن خطا، باید کل روند اجرای برنامه اندروید متوقف گردد.
حال برای آن که متد onReceive کلاس IncomingCall اجرا گردد « زمانیکه شخصی با ما تماس می گیرد »، می بایست کدی را در فایل AndroidManifest.xml اضافه نماییم. (شکل 16)
شکل 16
در صفت android:name برچسب receiver می بایست نام کلاس خود را که از کلاس BroadcastReceiver گسترش « extends » داده ایم، وارد نماییم.
مقدار صفت android:name برچسب action، یک رویداد ثبت شده در سیستم عامل اندروید است و اشاره به دریافت شدن یک تماس دارد.
کد بالا را می بایست در داخل برچسب application و بعد از برچسب activity، وارد نماییم.
در انتها نیز برای آنکه بتوانیم از برنامه استفاده نماییم، می بایست یک permission به فایل AndroidManifest.xml اضافه نماییم. (شکل 17)
شکل 17
برای تست نمودن پروژه، ابتدا پروژه را توسط emulator خود را اجرا نمایید. سپس از منوی Window – Open Perspective – DDMS را انتخاب نمایید. سپس در صفحه کاری جدید باز شده، به زبانه Emulator Control بروید.
سپس در قسمت Telephony Action، در کادر Incoming number، شماره تلفن emulator خود را که بر روی نوار عنوان emulator درج شده است، وارد نمایید و در مرحله بعد گزینه Voice را انتخاب نمایید و سپس گزینه Call را انتخاب نمایید. (شکل 18)
شکل 18
زمانی که شخصی با شما تماس بگیرد، برنامه به شکل زیر اجرا خواهد شد. (شکل 19)
شکل 19
توجه داشته باشید که برای آنکه برنامه به درستی عمل کند، بعد از نصب برنامه، حتما می بایست یک بار اجرا گردد. درصورتی که تمایل دارید برنامه بدون اجرا شدن به درستی عمل کند، می بایست صفت android:enable را به برچسب receiver اضافه نمایید و مقدار آنرا برابر با true قرار دهید
در اینجا کار ما به اتمام میرسد. امیدواریم نهایت استفاده از این مقاله را برده باشید.
شاد و پیروز باشید.