Android Programming

Published on July 2016 | Categories: Documents | Downloads: 59 | Comments: 0 | Views: 774
of 80
Download PDF   Embed   Report

Android Programming Book and Tips

Comments

Content

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫بسم اهلل الرحمن الرحیم‬

‫دوره آموزشی برنامه نویسی اندروید(‪)Android‬‬

‫انجمن برنامه نویسی اندروید ‪P30droid.com‬‬
‫مدرس‪ :‬فرزاد سرسیفی‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪1‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫فصل اول‬

‫شروع با اندروید ؟‬

‫اندروید چیست‪:‬‬
‫اندروید مجموعه ای از نرم افزارهای )‪ (software stack‬موبایل است که شامل سیستم عامل‪middleware ،‬ها و برنامه‬
‫های کلیدی )‪ (key applications‬است ‪ . Android‬به زبان ساده سیستم عاملی است برای دستگاه های موبایل و گوشی‬
‫های هوشمند که توسط بیش از ‪ 03‬کمپانی معروف پشتیبانی می شود‪ .‬اندروید اوپن سورس است و توسعه دهندگان می‬
‫توانند با استفاده از ‪ Android SDK‬برنامه های مختلفی برای این سیستم عامل بنویسند‪ .‬در واقع اندروید بستری را فراهم‬
‫می کند تا برنامه نویسان بتوانند هرچه سریعتر و بهتر برنامه هایی بسازند که از تمام ویژگی های یک گوشی هوشمند استفاده‬
‫کند‪ .‬اندروید به معنای واقعی “ باز )‪ ” (Open‬است‪ ،‬یعنی برنامه نویس می تواند از تمام قدرت یک تلفن همراه استفاده کند‪.‬‬
‫ا ندروید امکان استفاده از توابع داخلی گوشی موبایل همچون شماره گیری‪ ،‬فرستادن ‪ SMS‬یا استفاده از دوربین گوشی را به‬
‫برنامه نویسان می دهد تا بتوانند اپلیکیشن های قدرتمند و کاربردی برای کاربران بسازند‪.‬‬
‫خصوصیات‪:‬‬
‫‪ .1‬چارچوب برنامه ‪ (Application framework):‬امکان استفاده مجدد و جایگزینی کامپوننت ها را فراهم میکند‪.‬‬
‫‪ .2‬ماشین مجازی دالویک ‪ (Dalvik virtual machine):‬وظیفه بهینه سازی کدها برای اجرا بر روی موبایل را دارد‪.‬‬
‫‪ .0‬مرورگر داخلی ‪ (Integrated browser):‬منطبق بر موتور ‪ WebKit‬منبع باز‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪2‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.13‬‬

‫گرافیک بهینه شده ‪ (Optimized graphics):‬قدرت گرفته از کتابخانه ‪ ،D۲‬گرافیک ‪D ۳‬منطبق بر ‪OpenGL‬‬
‫‪ES 1‬شتاب دهنده سخت افزاری‬
‫‪SQLite:‬برای ذخیره اطالعات‬
‫پشتیبانی از رسانه ‪ (Media support):‬با پشتیبانی از فرمتهای رایج صوتی‪ ،‬ویدئویی و عکس ‪(MPEG4, H.264,‬‬
‫)‪MP3, AAC, AMR, JPG, PNG, GIF‬‬
‫مکالمات تلفنی )‪ : (GSM Telephony‬وابسته به نوع سخت افزار‬
‫‪ : Bluetooth, EDGE, 3G, and WiFi‬وابسته به نوع سخت افزار‬
‫دوربین‪ ،GPS ،‬قطب نما و شتاب سنج‪ :‬وابسته به نوع سخت افزار‬
‫محیط توسعه غنی ‪ (Rich development environment):‬شامل ایموالتور‪ ،‬ابزارهای دیباگ کردن‪ ،‬پروفایل کردن‬
‫حافظه و پالگین برای محیط توسعه اکلیپس‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪3‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫معماری اندروید‪:‬‬
‫تصویر زیر الیه ها و کامپوننت های اصلی سیستم عامل اندروید را نشان میدهد‪.‬‬

‫برنامه های کاربردی‪(Applications):‬‬
‫اندروید به همراه بسته های مختلفی از جمله ‪browser, contacts, email client, SMS program, calendar, maps,‬‬
‫‪and others‬ارایه میشود‪ .‬تمام این برنامه ها با استفاده از زبان برنامه نویسی جاوا نوشته شده اند‪.‬‬
‫چارچوب برنامه‪(Application Framework):‬‬
‫با فراهم آوردن پلتفرم توسعه باز)‪ ، (open development platform‬اندروید برنامه سازان را قادر کرده است تا برنامه های‬
‫کاربردی خالقانه و غنی برای این پلت فرم فراهم سازند‪ .‬توسعه دهندگان آزادی کامل دارند تا از ویژگیهایی مانند دسترسی به‬
‫سخت افزار‪ ،‬دسترسی به اطالعات محلی (موقیت جغرافیایی)‪ ،‬اجرای سرویس های پس زمینه)‪، (background services‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪4‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫تنظیم زنگ ساعت‪ ،‬اضافه کردن اطالعیه ها )‪ (notifications‬به نوار وضعیت و بسیاری بسیاری دیگر در برنامه هایی که‬
‫میسازند‪ ،‬استفاده کنند‪.‬‬
‫توسعه دهندگان دسترسی کامل به همان چارچوب‪ API‬هایی دارند که برنامه های هسته )‪ (the core applications‬دارند‪.‬‬
‫معماری برنامه های کاربردی )‪ (The application architecture‬بمنظور ساده سازی استفاده مجدد از کامپوننت ها طراحی‬
‫شده است‪ .‬هر برنامه ای می تواند قابلیت های خود را در اختیار دیگر برنامه ها قرار دهد و همچنین از قابلیت های دیگر برنامه ها‬
‫استفاده کند ( البته به محدودیت های امنیتی چارچوب هم بستگی دارد)‪ .‬این طرزکار مشابه به کاربر اختیار تعویض و جایگزینی‬
‫کامپوننت ها را می دهد‪.‬‬
‫برنامه های زیربنایی‪ ،‬مجموعه ای از سرویس ها و سیستم های زیرند‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مجموعه قابل گسترشی از ‪ View‬ها که برای ساخت برنامه های کاربردی استفاده می شوند‪ ،‬مانند ‪lists, grids, text‬‬
‫‪boxes, buttons, and even an embeddable web browser‬‬
‫‪ ،Content Providers‬که برنامه ها را قادر میسازد تا به اطالعات برنامه های دیگر مانند لیست تماس‪ ،‬دسترسی پیدا‬
‫کنند یا حتی اجازه دسترسی به اطالعات خود را به برنامه های دیگر دهند‪.‬‬
‫یک مدیر منابع )‪ (Resource Manager‬اجازه دسترسی به منابعی که کد‪-‬برنامه نیستند را فراهم میکند مانند‬
‫دسترسی به رشته های محلی)‪ ، (localized strings‬تصاویر و فایل های مربوط به طرح برنامه‪(layout files).‬‬
‫یک مدیر اطاعیه)‪ ، (Notification Manager‬که از این طریق برنامه ها را قادر میکند تا هشدارهای خود را در نوار‬
‫وضعیت نشان دهند‪.‬‬
‫یک مدیر فعالیت)‪ ، (Activity Manager‬که مدریت چرخه زندگی )‪ (lifecycle‬برنامه ها را در دست دارد و به نحوه‬
‫اجرای برنامه ها نظارت میکند‪.‬‬

‫کتابخانه ها‪(Libraries):‬‬
‫اندروید شامل مجموعه از کالسهای ‪ ++C/C‬است که توسط کامپوننت های سیستم اندروید مورد استفاده قرار میگیرند‪ .‬همچنین‬
‫استفاده از این قابلیت به توسعه دهندگان نیز داده شده است‪ .‬بعضی از این کتابخانه های اصلی به این قرارند‪:‬‬

‫‪System C library – a BSD-derived implementation of the standard C system library (libc),‬‬
‫‪tuned for embedded Linux-based devices‬‬
‫‪Media Libraries – based on PacketVideo’s OpenCORE; the libraries support playback and‬‬
‫‪recording of many popular audio and video formats, as well as static image files,‬‬
‫‪including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG‬‬
‫‪Surface Manager – manages access to the display subsystem and seamlessly composites‬‬
‫‪2D and 3D graphic layers from multiple applications‬‬
‫‪LibWebCore – a modern web browser engine which powers both the Android browser‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪5‬‬

‫‪‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪and an embeddable web view‬‬
‫‪SGL – the underlying 2D graphics engine‬‬
‫‪3D libraries - an implementation based on OpenGL ES 1.0 APIs; the libraries use either‬‬
‫‪hardware 3D acceleration (where available) or the included, highly optimized 3D‬‬
‫‪software rasterizer‬‬
‫‪FreeType – bitmap and vector font rendering‬‬
‫‪SQLite – a powerful and lightweight relational database engine available to all‬‬
‫‪applications‬‬

‫زمان اجرای اندروید‪(Android Runtime):‬‬
‫اندروید شامل مجموعه ای از کتابخانه های اصلی است که اکثر عملکردهای قابل دسترس را با استفاده از زبان جاوا ممکن میسازد‪.‬‬
‫هر برنامه کاربردی اندروید در فرایند مخصوص به خودش اجرا میشود و دسترسی مخصوص به خود در ارتباط با ماشین مجازی‬
‫دالویک دارد‪ .‬این ماشین بگونه ای ساخته شده است که هر دستگاهی )‪ (device‬میتواند چندین ماشین مجازی را بطور همزمان‬
‫اجرا کند ‪.‬هر ماشین مجازی دالویک فایل ها را به فرمت )‪ (dex.‬اجرا میکند که اینکار باعث بهینه سازی در دستگاه هایی که‬
‫حافظه پایینی دارند‪ ،‬می شود‪ .‬این ماشین مجازی مبتنی بر رجیسترهاست و کالسهایی که توسط کامپایلر جاوا ساخته شده است را‬
‫اجرا میکند‪.‬‬
‫ماشین مجازی دالویک برای اجرای قابلیت های اساسی مانند مدریت حافظه کم و چند نخی )‪ (threading‬متکی بر هسته‬
‫لینوکس است‪.‬‬
‫هسته لینوکس‪(Linux Kernel):‬‬
‫اندروید متکی بر لینوکس نسخه ‪ ۲٫۶‬برای انجام سرویس های اصلی مانند ‪security, memory management, process‬‬
‫‪management, network stack‬و ‪ driver model‬است‪ .‬این هسته همچنین مانند یک الیه انتزاعی ‪(abstraction‬‬
‫)‪layer‬مابین سخت افزار و سایر نرم افزارها عمل میکند‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪6‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫راه اندازی اندروید‪:‬‬
‫‪ -1‬جاوا ‪ ۵٫۰‬یا جدیدتر‬
‫‪ -2‬قبل از هر چیز به یک کپی از جاوا نیاز دارید‪ .‬تمام ابزارهای توسعه اندروید به آن نیاز دارند و تمام برنامه هایی که برای‬
‫تولید اپلیکیشت مینویسید براساس آن خواهد بود‪ .‬بنابراین حد اقل به جاوا ‪ ۵٫۰‬یا ‪ ۶٫۰‬که بر روی سیستم تان نصب‬
‫باشد نیاز دارید‪.‬‬
‫‪ -0‬تنها داشتن ‪ JRE‬هم کافی نیست‪ ،‬شما احتیاج به کیت کامل توسعه نیز دارید ‪.‬من پیشنهاد میکنم آخرین نسخه آن را‬
‫(که در زمان نوشتن این پست ‪ JDK SE 6‬است(از سایت شرکت سان( که البته امتیاز این شرکت توسط شرکت اوراکل‬
‫خریداری شده است) دانلود نمایید‪ .‬کاربران مک ‪ OSx‬هم می بایست آخرین نسخه این سیستم عامل به همراه ‪JDK‬را‬
‫از سایت اپل دانلود نمایند‪ .‬سپس فایل دانلود شده را بر روی سیتم تان نصب کنید‪.‬‬
‫‪ -4‬برای اینکه از متوجه شوید ورژن مورد قبول را بر روی سیتم تان دارید یا خیر‪ ،‬کامند زیر را در ‪Command Prompt‬‬
‫(روی استارت منو کلیک کنید‪ ،‬در قسمت جستجو تایپ کنید )‪ cmd‬اجرا کنید‪:‬‬
‫‪C:\> java -version‬‬
‫‪ -5‬میبایست جوابی مانند تصویر زیر دریافت کنید‪.‬‬

‫اکلیپس)‪(Eclipse‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪7‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫حاال نیاز است تا محیط توسعه جاوا را بر روی سیستمتان نصب کنید‪ .‬محیط توصیه شده برای استفاده و برنامه نویسی از طرف‬
‫گوگل‪ ،‬اکلیپس معرفی شده است ‪ .‬استفاده از این محیط هم رایگان است و هم گوگل از آن پشتیبانی کامل میکند ‪.‬محیط های‬
‫دیگری هم هستند مانند نت بینز که میتوانید بجای اکلیپس از آن استفاده کنید‪.‬‬
‫به صفحه دانلود سایت اکلیپس بروید و ‪ Eclipse IDE for Java Developers‬را دانلود کنید‪ .‬توجه کنید به چیزی بیشتر از‬
‫‪ Eclipse SDK classic‬نیاز دارید‪ ،‬پس آنرا دانلود نکنید‪ .‬پکیج را دانلود کنید و در قسمت دلخواهس از کامپیوتر از حالت پک‬
‫خارج کنید (اگر از ‪ winzip‬یا نرم افزارهای مشابه استفاده میکنید بر روی فایل دانلود شده راست کلیک کنید و سپس از منوی باز‬
‫شده بر روی ‪ Extract Here‬کلیک کنید‬
‫اندروید‪SDK‬‬
‫کیت توسعه اندروید به دو قسمت تقسیم شده است ‪. the SDK Starter Package‬و ‪ the SDK Components.‬به صفحه‬
‫دانلود ‪ SDK‬بروید و پکیج مورد نظرتان را دانلود کنید‪ .‬سپس در محل دلخواهی از کامپیوتر آنرا از حالت پک خارج‪.‬‬
‫پالگین اکلیپس)‪(Eclipse Plug-In‬‬
‫برای راحتی بیشتر توسعه دهندگان‪ ،‬گوگل پالگینی آماده کرده است و آن را ‪ Android Development Toolkit‬یا باختصار‬
‫‪ADT‬نامیده است‪ .‬برای نصب پالگین مراحل زیر را دنبال کنید (این مراحل بر اساس اکلیپس ‪ ۳٫۵‬نوشته شده است‪ .‬ورژن های‬
‫مختلف ممکن کمی تغییر نسبت به این داشته باشند‪.‬‬
‫‪- ۱‬اکلیپس را اجرا کنید‪.‬‬
‫‪- ۲‬از منوی ‪ Help‬بر روی ‪ Install new software‬کلیک کنید‪.‬‬
‫‪- ۳‬بر روی لینک ‪ Available Software Sites‬کلیک کنید (زیر دکمه‪Add).‬‬
‫‪4‬بر روی دکمه ‪ Add‬کلیک کنید‬‫‪- ۵‬در قسمت نام‪ ،‬نامی دلخواه را وارد کنید (پیشنهاد من )‪: Android Development Tools‬و در قسمت محل‬
‫)‪(Location‬آدرس ‪https://dl-ssl.google.com/android/eclipse‬را بدهید‪ .‬به شکل زیر دقت کنید‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪8‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫وقتی مجدداً اکلیپس راه اندازی میشود ممکن چند پیغام خطا نشان دهد‪ ،‬نگران نباشید‪ .‬چون باید به اکلیپس بگویید که ‪SDK‬‬
‫کجاست‪ .‬در ویندوز به ‪ Window > Preferences > Android‬بروید (در مک به )‪ Eclipse > Preferences‬و آدرس‬
‫محلی نصب ‪ SDK‬را به اکلیپس بدهید‪.‬‬

‫ورژن های اندروید‬
‫تاریخچه ی نسخههای سیستم عامل تلفن همراه اندروید با انتشار نسخه بتای این نرمافزار در ماه نوامبر سال ‪ ۲۰۰۲‬آغاز شد‪ .‬اولین‬
‫نسخه تجاری این سیستم عامل در سپتامبر ‪ ۲۰۰۲‬بر روی یکی از گوشیهای شرکت ‪ HTC‬منتشر شد ‪.‬این سیستم عامل در حال‬
‫حاضر زیر نظر شرکت گوگل و اتحادیه گوشی بازمخفف ‪OHA‬در حال توسعه است‪.‬‬

‫از ماه آوریل سال ‪ ۲۰۰۲‬و با انتشار نسخه ‪ ۱٫۵‬هر نسخه این سیستم عامل با نام یک شیرینی و یا دسر نام گذاری میشود نوعی‬
‫کیک بزرگتر از کیک یزدی ‪Donut‬نوعی پیراشکی ‪Eclair‬نوعی شیرینی خامهای ‪Foroy‬مخفف عبارت ‪ Frozen Yogurt‬که‬
‫یک نوع دسر است ‪Gingerbread‬نان زنجفیل ‪Ice Cream Sandwich‬بستنی حصری ‪Jelly Bean‬آبنبات ژلهای و‬
‫‪KitKat‬شکالت کیتکت بودهاند‪.‬‬
‫در ماه سپتامبر سال ‪ ۲۰۱۲‬اعالم شد که تا کنون بیش از ‪ ۵۰۰‬میلیون دستگاه در سراسر دنیا از این سیستم عامل استفاده‬
‫میکنند ‪.‬آخرین به روز رسانی اندروید نسخه ‪ ۴٫۴‬یا کیتکت میباشد که در ماه اکتبر سال ‪ ۲۰۱۳‬انتشار یافته است‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪9‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫اندروید نسخه ‪۱٫۰‬‬
‫اندروید نسخه ‪ ۱٫۰‬اولین نسخه اندروید که به صورت تجاری در تاریخ ‪ ۲۳‬سپتامبر ‪ ]۱[۲۰۰۲‬بر روی تلفن همراه شرکت اچ تی سی‬
‫‪ ۱(HTC Dream (G‬معرفی شد‪.‬‬
‫تلفن همراه شرکت اچ تی سی ‪ (HTC Dream (G1‬با اندروید نسخهٔ ‪۱٫۰‬‬
‫قابلیتهای اندروید نسخه ‪ ۱٫۰‬شامل‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫برنامه بازار اندروید )‪ (Android Market‬جهت نصب و بروز رسانی برنامهها از طریق اینترنت‪.‬‬
‫مرورگر وب با قابلیت نمایش کامل صفحههای اینترنتی با پسوند‪XHTML ٫HTML‬و بزرگنمایی محتوای صفحه‬
‫پشتیبانی از دوربین البته این نسخه از اندروید فاقد قابلیت تغییر رزولوشن تصویر یا تغییر سفیدی یا رنگ تصویر بود ‪.‬‬
‫هماهنگ سازی حساب جی میل با برنامه جی میل اندروید از طریق اینترنت‪.‬‬
‫هماهنگ سازی حساب جی میل با برنامه)‪(People app‬اندروید از طریق اینترنت‪.‬‬
‫هماهنگ سازی حساب جی میل با تقویم اندروید از طریق اینترنت‪.‬‬
‫برنامه گوگل مپس یا نقشههای گوگل برای مشاهده نقشهها و تصاویر ماهوارهای از خیابانها و گذرگاهها و همچنین پیدا‬
‫کردن کسب و کار محلی و جهت یابی در هنگام رانندگی با استفاده از جی پی اس‬
‫قابلیت جستجوی گوگل که به کاربر امکان جستجو در اینترنت و برنامههای تلفن همراه یا در میان لیست مخاطبین و‬
‫تقویم را میدهد‪.‬‬
‫قابلیت گوگل تالک )‪ (Google Talk‬جهت پیام فوری از طریق اینترنت‪.‬‬
‫پشتیبانی از پیامک متنی )‪ (SMS‬و پیامک تصویری)‪(MMS‬‬
‫مدیا پلیر با قابلیت پخش فایلهای رسانهای ‪ (media files).‬البته این نسخه فاقد پشتیبانی از اجرای فیلم و بلوتوث‬
‫استریو بود‪.‬‬
‫برنامه یوتیوب )‪ (YouTube‬جهت تماشای فیلمهای این سایت از طریق اینترنت‪.‬‬
‫اعالم اطالعیه های )‪(Notifications‬نوار وضعیت از طریق زنگ قابل انتخاب یا ال ای دی )‪ (LED‬و لرزاننده‬
‫)‪(vibration‬تلفن همراه‪.‬‬
‫وجود برنامههایی مانند‪ :‬زنگ هشدار)‪ ،(Alarm Clock‬تقویم‪ ،‬برنامه تماس گیر)‪ ، (Dialer‬النچر صفحه‬
‫خانگی‪ ،(Home screen )launcher‬گالری عکس)‪ Pictures (Gallery‬و تنظیمات‬
‫پشتیبانی از اتصاالت بی سیم‪ ،‬وای‪-‬فای و بلوتوث‬

‫اندروید نسخه ‪۱٫۱‬‬
‫در تاریخ ‪ ۲‬فوریه ‪ ۲۰۰۲‬اندروید ‪ ۱٫۰‬به ‪ ۱٫۱‬بروز رسانی شد‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪10‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫اندروید نسخه ‪ ۲‬و ‪ ۲٫۱‬یا‪Éclair‬‬
‫هر دو نسخه ‪ ۲‬و ‪ ۲٫۱‬اندروید مانند نسخه ‪ ۱٫۶‬مبتنی بر کرنل لینوکس ‪ ۲٫۶٫۲۲‬طراحی شدهاند‪ .‬اندروید ویرایش ‪ ۲‬در ‪ ۲۶‬اکتبر‬
‫‪ ۲۰۰۲‬معرفی شد‪ .‬در سوم دسامبر ‪ SDK ۲۰۰۲‬نسخه ‪ ۲٫۰٫۱‬معرفی شد و ‪ SDK‬ویرایش ‪ ۲٫۱‬در ‪ ۱۲‬ژانویه ‪ ۲۰۱۰‬منتشر‬
‫گردید‪ .‬اهم امکانات اضافه شده در این نسخه به شرح زیر هستند‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫سرعت سختافزاریِ بهبود یافته‬
‫ویژگی چند لمسی‪Multi Touch‬‬
‫پشتیبانی از رزولوشنهای بیشتر برای صفحه نمایش‬
‫رابط کاربری بهروزرسانی شده‬
‫مرورگر اینترنتی با قابلیت پشتیبانی از‪HTML5‬‬
‫دفترچه تلفن بهروزرسانی شده‬
‫گوگل مپ نسخه ‪۳٫۱٫۲‬‬
‫پشتیبانی از‪Microsoft Exchange‬‬
‫افزوده شدن امکان فالش داخلی برای دوربین‬
‫افزوده شدن زوم دیجیتال دوربین‬
‫بهروزرسانی صفحه کلید مجازی‬
‫پشتیبانی از بلوتوث نسخه ‪۲/۱‬‬
‫اضافه شدن قابلیت کاغذ دیواریهای متحرک‬
‫اضافه شدن امکان ارسال فایل با استفاده از بلوتوث‬

‫اندروید نسخه ‪ ۴٫۰‬یا‪Ice Cream Sandwich‬‬
‫اندروید نسخه ‪ ۴٫۰‬یا بستنی حصیری در ‪ ۱۲‬اکتبر ‪ ۲۰۱۱‬معرفی شد و آن را روی تلفن همراه گلکسی نکسوس معرفی کرد‪ .‬در این‬
‫نسخه تغییرات عمدهای در این سیستم عامل نسبت به نسخههای پیشین بهوجود آمد‪ .‬رابط کاربری به طور کلی بازنویسی و‬
‫دگرگون شد و همه چیز از نو بهینهسازی شدهاست‪ .‬ضمن اینکه امکانات جدید زیادی به اندروید چهارم اضافه شد‪ .‬قابلیتهای تازه‬
‫و تغییرات شامل‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫امکان استفاده از دکمههای مجازی در رابط کاربری به جای استفاده از دکمههای فیزیکی در پایین گوشی‪.‬‬
‫قرار دادن ویجتها در تبهایی مشابه با لیست اپلیکیشنها‪.‬‬
‫پوشهها راحتتر و با کشیدن و انداختن ساخته میشوند‪( .‬شبیه به سیستمعامل آیاواس)‬
‫نرمافزار جدید برای تلفن‬
‫امکان زوم در تقویم‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪11‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫اضافه کردن امکان جستجوی افالین در میان ایمیلها در جیمیل و دو خطی کردن پیشنمایش ایمیلها‪.‬‬
‫امکان گرفتن اسکرین شات با نگه داشتن دکمه ‪ Power‬و دکمه صدا‪.‬‬
‫بهبود سیستم غلط یابی کیبرد‪.‬‬
‫از صفحه اصلی گوشی مستقیماً میتوان به اپلیکیشنها دسترسی داشت‪.‬‬
‫بهبود کپی و پیست کردن‪.‬‬
‫بهبود سیستم تشخیص صدا‪.‬‬
‫خارج کردن سیستم از حالت قفل با سیستم تشخیص چهره‪.‬‬
‫پشتیبانی مرورگر جدید از تب که میتواند تا ‪ ۱۶‬تب همزمان را پیشتیبانی کند‪.‬‬
‫به روز بوکمارکهای مرورگر با بوکمارکهای کروم‪.‬‬
‫سیستم فونت جدید که گوگل نام آن را «روبوتو» گذاشته است‪.‬‬
‫امکانات نظارت و مدیریت بر میزان مصرف دیتا و مشخص کردن سقف مصرف دیتا‪.‬‬
‫امکان توقف برنامههایی که در پس زمینه از اینترنت استفاده کردند‪.‬‬
‫بهبود اپلیکیشن دوربین‪ ،‬رساندن تاخیر شاتر به صفر و امکان زوم هنگام فیلمبرداری‬
‫اپلیکیشن ویرایش عکس‪.‬‬
‫گالری مدیریت تصاویری جدید بر اساس موقعیت و افراد‪.‬‬
‫برنامه شبکههای اجتماعی به نام ‪ People‬ادغام شده با گوگل پالس‪.‬‬
‫اندروید ‪ Beam:‬امکانی که با کمک ‪ NFC‬اجازه میدهد اطالعاتی مانند وب سایتها‪ ،‬دفترچه تماس‪ ،‬آدرس‪ ،‬فیلم و…‬
‫را سریعاً به فرد دیگری انتقال داد‪.‬‬

‫ماشین مجازی اندروید‪:‬‬
‫قبل از اینکه بتوانید برنامه ای را که توسط اکلیپس نوشته اید بر روی ایموالتور مشاهده کنید‪ ،‬باید ایموالتور را تنظیم کنید‪ .‬مثالً‬
‫بگویید این ایموالتور قرار است کدام ورژن از اندروید را برای شما شبیه سازی کند یا کدام سطح ‪ API‬را می خواهید پشتیبانی‬
‫کنید‪ .‬یکی از مزایای ماشین مجازی اندروید نسبت به سایر ایموالتورها مانند نوکیا یا اپل این است که به تعداد نا محدودی میتوانید‬
‫ایموالتور داشته باشید‪.‬‬
‫در قسمت سمت راست بر روی دکمه ‪ New‬کلیک کنید تا پنجره ‪ Create new Android Virtual Device – AVD‬باز‬
‫شود‪ .‬مطابق شکل زیر اطالعات را وارد فیلدهای مربوطه کنید‪ .‬در آخر بر روی دکمه ‪ Create AVD‬کلیک کنید‪.‬‬

‫در پنجره ‪ Create new Android Virtual Device‬وقتی میخواهید ماشین مجازی جدیدی بسازید فیلدهای مختلفی وجود‬
‫دارد‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪12‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪Name‬نامی است دلخوا ه‪ .‬به دلخواه خود یک نام انتخاب کنید‪ .‬از آنجا که ممکن است به چند ماشین مجازی نیاز داشته باشید‪،‬‬
‫نامی انتخاب کنید که بعداً بتوانید تشخیص دهید چه ماشینی است و کدام سطح از ‪ API‬را قرار است پشتیبانی کند‪.‬‬
‫‪Target‬در این قسمت به ماشین مجازی میگویید کدام ورژن از اندروید با چه سطح ‪ API‬ی را شبیه سازی کند‪ .‬دقت کنید اگر‬
‫برنامه ای برای ورژن ‪ ۲٫۲‬نوشته شود قابل اجرا بر روی ورژنهای پایینتر یا قبلی نیست‪ .‬ولی مواظب باشید زرنگی نکنید ‪! (Target‬‬
‫را بر روی ‪ ۱٫۵‬تنظیم کنید) علت این است که برنامه هایی که برای ورژن ‪ ۱٫۵‬نوشته میشوند بصورت مناسبی در ورژنهای جدیدتر‬
‫نمایش داده نمی شوند چون در ورژن ‪ ۱٫۵‬اندازه صفحه نمایش کوچکتر است و در ورژنهای جدیدتر اندازه صفحه بیشتر شده است‪.‬‬
‫‪SD Card‬همانطور که از اسمش معلوم است حجم کارت جانبی را نشان میدهد ‪.‬ممکن است بر روی موبایل کارتی با حجم‬
‫بیشتر از ‪ ۶۴‬مگا بایت داشته باشیم ولی نیازی نیست که بر روی ایموالتور هم همان را ذکر کنیم‪ .‬علت این است که این فضا از‬
‫فضای کامپیوتر شما کسر میشود درصورتیکه برای اجرا و نصب یک برنامه هیچوقت به همچین فضایی نیاز ندارید‪.‬‬
‫‪Skin:‬اندازه یا سایز صفحه نمایش را مشخص میکند‪.‬‬
‫‪ Hardware:‬اگر نیاز به قابلیت خاصی دارید (مثالً استفاده از سنسور شتاب دهنده) میتوانید با کلیک بر روی ‪ New‬آنرا به لیست‬
‫اضافه کنید‪.‬‬
‫نکته‪ :‬میتوانید به تعداد نامحدودی ماشین مجازی با مشخصات متفاوت داشته باشید و هر ماشین‪ ،‬مشخصات مربوط به‬
‫یک نوع ورژن خاص را اجرا کند‪.‬‬
‫آشنایی با ‪: ADB‬‬
‫‪ADB‬مخفف عبارت ) ‪ ( Android Debug Bridge‬میباشد‪،‬که به عنوان پل ارتباطی برای مدیریت دیوایس های اندرویدی‬
‫مورد استفاده قرار میگیرد ‪ .ADB‬یکی از امکانات ضروری است که هر برنامه نویسی اندرویدی حتما باید با این امکان آشنا شود‪.‬‬
‫در این آموزش بطور اجمالی به این موضوع پرداخته میشود و تعدادی از دستورات ‪ ADB‬را اجرا میکنیم‪.‬‬
‫برای دستیابی به ‪ ADB‬باید به ریشه پوشه ‪ platform-tools‬در مسیر ‪ SDK‬بروید ‪ .‬اگر توجه کنید در آن مسیر فایلی به اسم‬
‫‪ ADB.exe‬موجود میباشد ‪،‬اما زمانیکه آن را اجرا میکنیم بعد چند ثانیه بسته میشود‪.‬برای اجرا دستور ‪ cmd‬را در ‪Run‬وارد‬
‫کنید و به آن مسیر سوئیچ کنید‬

‫مثال‪:‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪13‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫لیستی از دستورات ضروری‪:‬‬
‫‪adb Devices‬‬
‫این دستور لیستی از دیوایس هایی که به آنها کانکت هستیم را نمایش میدهد‪:‬‬
‫کد ‪:‬‬
‫‪adb devices‬‬

‫رستارت کردن ‪ADB Server‬‬
‫اینکار باعث میشود که ‪ ADB‬رستارت شده و از ابتدا اجرا شود‪:‬‬
‫کد ‪:‬‬
‫‪adb stop-server‬‬
‫‪adb start-server‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪14‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

Pull - Push
‫برای کپی کردن فایل ها به دیوایس ها‬push
pc‫برای کپی کردن فایل ها از دیوایس به‬pull :
: ‫کد‬
adb push <local source file path> <device destination file path>
adb pull <device source file path> <local destination file path>
adb install ‫نصب برنامه‬
: ‫کد‬
adb install <file path to apk>

:‫حذف برنامه‬
: ‫کد‬
adb uninstall <package name>

15

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫فصل دوم‬

‫آموزش زبان برنامه نویسی جاوا‬

‫زبان برنامه نویسی جاوا‬
‫جاوا )‪: (Java‬یک زبان برنامهنویسی شئگراست که برای اولین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد‬
‫شد و در سال ‪ ۱۲۲۵‬به عنوان بخشی از سکوی جاوا منتشر شد‪ .‬زبان جاوا شبیه به ‪++C‬است اما مدل شیءگرایی آسانتری دارد و‬
‫از قابلیتهای سطح پایین کمتری پشتیبانی میکند‪ .‬یکی از قابلیتهای اصلی جاوا این است که مدیریت حافظه را بطور خودکار‬
‫انجام میدهد‪.‬‬
‫·این زبان باید ساده‪ ،‬شیگرا و مشهور باشد ‪.‬‬
‫·مطمئن و بدون خطا باشد ‪.‬‬
‫·وابسته به معماری کامپیوتر نبوده و قابل انتقال باشد ‪.‬‬
‫·باید با کارایی باال اجرا شود ‪.‬‬
‫·باید به صورت پویا و نخکشیشده باشد‪.‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪16‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪JDK‬چیست؟‬
‫‪JDK‬که مخفف عبارت ‪Java Development Toolkit‬می باشد ترکیبی از کامپایلر زبان جاوا‪ ،‬کالس های کتابخانه ای ‪(Java‬‬
‫)‪Class Libraries‬و ‪ JVM‬و فایل های راهنمای آنها می باشد‪ .‬برای اینکه ما بتوانیم با استفاده از زبان برنامه نویسی جاوا‪ ،‬برنامه‬
‫بنویسیم به این مجموعه نیاز داریم‬
‫توزیع های جاوا‬
‫‪ ‬شرکت سان میکروسیستم‪ ۴ ،‬نوع ویرایش از کاربردهای مختلف جاوا را ارائه دادهاست‪:‬‬
‫‪Java card for smartcard ‬‬
‫‪JavaME ‬‬
‫‪JavaSE ‬‬
‫‪JavaEE ‬‬

‫متغیرها و انواع دادهها‬
‫یک متغیر )‪ (variable‬مکانیست در حافظه که میتوان مقادیری را در آن ذخیره کرد‬
‫انواع متغیرها در زبان جاوا‪:‬‬
‫•‬

‫متغیر کالس ‪public‬‬

‫•‬

‫متغیر محلی‪private‬‬

‫نوع های داده ای‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪17‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دستورات شرطی در جاوا به ‪ ۴‬دسته دستور تقسیم می شوند‪:‬‬
‫{)‪if (Condition‬‬
‫;‪statements‬‬
‫}‬
‫{‪else‬‬
‫;‪statements‬‬
‫}‬
‫حالت دوم‪:‬‬
‫{)‪if (num>3‬‬
‫;‪statements‬‬
‫}‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪18‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫{‪else‬‬
‫{)‪if(num<0‬‬
‫;‪statements‬‬
‫}‬
‫{‪else‬‬
‫;‪statements‬‬
‫}‬
‫}‬
‫‪ -3‬در حالتی که تعداد این دستورات تو در توی ‪if‬زیاد باشد به دلیل اینکه از خوانایی برنامه می کاهد می توان از دستور ‪switch‬‬
‫استفده نمود‪ .‬قالب این دستور به شکل زیر است‪.‬‬
‫{)‪switch (variable‬‬
‫‪case value1:‬‬
‫;‪statements‬‬
‫;‪break‬‬
‫‪case value2:‬‬
‫;‪statements‬‬
‫;‪break‬‬
‫‪case value3:‬‬
‫;‪statements‬‬
‫;‪break‬‬
‫‪default:‬‬
‫;‪statements‬‬
‫;‪break‬‬
‫}‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪19‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪ -4‬آخرین دستور شرطی در جاوا عملگری است که می تواند به جای دستور ‪ if else‬تک دستوری قرار بگیرد‪.‬‬
‫;)‪Return value = (condition ? true_value : false_value‬‬
‫;‪int num‬‬
‫;‪num=3‬‬
‫;)‪int result = (num==3 ? 1: 2‬‬

‫دستورات حلقه و تکرار‬
‫دستورات حلقه و تکرار در جاوا به سه دستور کلی تبدیل می شوند‪.‬‬
‫‪While statement‬‬

‫‪for statement‬‬

‫‪do while statement‬‬
‫شکل کلی دستور ‪while‬به این صورت می باشد‪.‬‬
‫{)‪while(condition‬‬
‫;‪statements‬‬
‫}‬

‫حلقه ‪: For‬‬
‫{)‪for (initial_counter ; condition ; increment_counter‬‬
‫;‪statements‬‬
‫}‬
‫آخرین نوع دستورات تکرار در جاوا دستور ‪do while‬می باشد‪ .‬شکل کلی آن بصورت زیر است‪.‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪20‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫{‪do‬‬
‫;‪statements‬‬
‫;)‪while(condition‬‬

‫آرایه ‪Array‬‬
‫هر آرایه ‪array‬گروهی از متغیر های هم نوع است که ارجاع به آنها از طریق یک نام مشترک صورت می گیرد‬
‫در جاوا آرایه هایی از انواع مختلف را به صورت تک یا چند بعدی می توان ایجاد کرد‬
‫;]‪String[] names = new String[3‬‬

‫;"‪names[0] = “Android‬‬
‫;"‪names[1] = “IOS‬‬
‫;"‪names[2] = “Linux‬‬
‫کالس تاریخ و زمان ‪Date‬‬
‫;)(‪Date date = new Date‬‬
‫;)(‪date.toString‬‬
‫;)(‪date.getDay‬‬
‫;)(‪date.getDate‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪21‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫;)(‪date.getHours‬‬
‫;)(‪date.getMinutes‬‬
‫;)(‪date.getMonth‬‬
‫;)(‪date.getSeconds‬‬
‫;)(‪date.getTime‬‬

‫بدست آوردن تاریخ جاری سیستم‬
‫;)"‪DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss‬‬
‫;)(‪Date date = new Date‬‬
‫;))‪System.out.println(dateFormat.format(date‬‬

‫مثال ‪Current Date: Sun 2004.07.18 at 04:14:09 :‬‬
‫;) (‪Date dNow = new Date‬‬
‫;)" ‪SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss‬‬

‫تابع ( ‪) Function‬‬
‫یک تابع مجموعه ای واحد از یکسری دستورالعمل است که در هر بار فراخوانی ‪ ،‬کل دستورات درون آن یکبار اجرا می شود ‪.‬‬
‫قابلیت های تابع ‪:‬‬
‫دستورات یک تابع ‪ ،‬تا زمانی که فراخوانی نشود ‪ ،‬اجرا نخواهد شد ‪ .‬از توابع برای تعریف دستور العمل هایی استفاده می شود که‬
‫می خواهیم اجرای آنها کنترل شده باشد و در مواقع معینی ( مثل وقوع یک رویداد یا ‪ ) ...‬انجام شود ‪.‬‬
‫یک تابع را می توان از هر نقطه ای در صفحه فراخوانی کرد ‪.‬‬
‫یک تابع می توان یکسری متغیرها را به عنوان پارامتر ورودی دریافت کرده و همچنین یک مقدار را به عنوان خروجی به نقطه ای‬
‫که از آن فراخوانی شده سات ‪ ،‬باز گردهند ‪.‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪22‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫محدوده عملکرد توابع‪:‬‬
‫‪‬‬

‫‪Public‬در تمامی کالس ها و پکیج ها‬

‫‪‬‬

‫‪ Private‬فقط در کالس جاری‬

‫‪‬‬

‫‪ Protected‬در پکیج جاری و کالس های پکیج جاری‬

‫توابع تو در تو‪ :‬توابعی هستند که دورن توابع دیگر اجرا میشوند‬
‫ایجاد تابع‬
‫{ )‪public static int funcName(int a, int b‬‬
‫‪// body‬‬
‫}‬
‫‪ Public‬محدوده فعالیت‬
‫‪ Int‬مقدار برگشتی تابع‬
‫‪ funcName‬نام تابع‬
‫‪ Int a,int b‬پارامترهای تابع‬
‫فراخوانی تابع‬
‫;)‪funcName(a, b‬‬
‫;)‪int min= funcName(a, b‬‬

‫تمرین‪:‬یک تابع ایجاد میکنیم که کوچیکترین عدد را پیدا کند‬
‫{ )‪public static int minFunction(int n1, int n2‬‬
‫;‪int min‬‬
‫)‪if (n1 > n2‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪23‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫;‪min = n2‬‬
‫‪else‬‬
‫;‪min = n1‬‬
‫;‪return min‬‬
‫}‬
‫‪CLASS‬‬
‫بصورت ساده باید بگویم که کالس ‪Class‬در واقع یک الگو و یک قالب کلی برای تعریف کردن اشیاء است‪ .‬بعبارت دیگر‪ ،‬کالس ها‬
‫در واقع موجودیتی ندارند و خود آنها شی ‪Object‬نیستند‪ ،‬بلکه در واقع یک الگو هستند که اشیاء بر اساس آن ساخته می شوند‪.‬‬
‫{‪public class name‬‬
‫‪//body‬‬
‫}‬

‫سازنده تابع ‪constractor‬‬
‫معموال بعضی از اعضای کالس قبل از استفاده نیاز به مقداردهی دارند‪ .‬این عمل توسط سازنده ‪constractor‬انجام می گیرد که‬
‫به شیء این امکان را می دهد که هنگام ایجاد مقداردهی شود‪ .‬سازنده تابعی است هم اسم کالس که وقتی یک نمونه از کالس‬
‫گرفته می شود اتوماتیک فراخوانی می شود‪.‬‬
‫تابع سازنده می تواند دارای پارامتر باشد بنابراین زمان ایجاد شیء می توان به متغیرهای عضو مقادیر اولیه داد‪ .‬برای ارسال‬
‫آرگومان به تابع سازنده باید هنگام تعریف شیء مقدار آرگومان بعد از نام شیء درون پرانتز قرار گیرد‪.‬‬
‫یک کالس می تواند دارای چند سازنده با پارامترهای مختلف باشد‪ .‬بهتر است همیشه حداقل یک سازنده حتی اگر خالی باشد‬
‫ساخته شود‪.‬‬
‫‪Encapsulation‬‬
‫هنگامی که یک کالس داریم و قصد دارید از آن در بقیه اکتیویتی ها استفاده کنیم یا ‪ new‬کار به آن‬
‫‪ Encapsulation‬گفته میشود‪.‬‬
‫{‪public class EncapTest‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪24‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
private String name;
private int age;
public int getAge(){
return age;
}
public String getName()
{ return name;
}
public void setAge( int newAge)
{
age = newAge;
}
public void setName(String newName){
name = newName;
}
}

Inheritance ‫ارث بری‬
extends ‫یعنی اینکه بتوانیم از والد خود ارث بری کنیم و از کلیه توابع و کالس های زیر مجموعه آن استفاده کنید و با دستور‬
‫اینکار را انجام میدهیم‬
public class Animal{
//body
}

25

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

public class Dog extends Animal{
//body
}
)‫مثال‬
public class Parent{
public P1() {
System.out.println(“parent");
}
}
public class Child extends Parent{
public c1() {
System.out.println(“Child");
}
}
:‫فراخوانی‬
Child cobj=new Child();
cobj.c1();
cobj.p1();
Interfaces
‫ کرد بدین صورت که نمی توان از آن شی ساخت وباید از آن در کالس‬new ‫ یک کالس میباشد که نمی توان از آن‬Interfaces
‫های دیگر استفاده کرد‬
.‫شود تمام توابع آن باید حتما استفاده شوند‬implements ‫ در یک کالس استفاده یا‬Interfaces ‫وقتی از‬

26

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
public class Horse implements Animal{

interface Animal {
public void eat();
public void travel();
}
-----------------public class Horse implements Animal{

public void eat()
{
System.out.println("Mammal eats");
}
public void travel()
{
System.out.println("Mammal travels");
}
public int noOfLegs()
{
return 0;
}

:‫فراخوانی‬

27

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫;)( ‪Horse m = new Horse‬‬
‫;)(‪m.eat‬‬
‫;)(‪m.travel‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪28‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫فصل سوم‬

‫‪ Layout‬در اندروید‬

‫‪XML‬چیست ؟‬
‫‪XML‬مخفف عبارت ‪ ،Xtensible Markup Language‬به معنای زبان فرا متنی قابل توسعه است ‪.‬‬
‫‪XML‬با هدف نگهداری و انتقال اطالعات طراحی شده است و نه برای نمایش آنها‬
‫تگ ها و نشانه های ‪ XML‬از قبل تعریف نشده اند ‪ ،‬بلکه کاربر بر حسب نیاز و کاری که می خواهد انجام دهد ‪ ،‬تگ های دلخواه‬
‫خود را ایجاد می کند‬
‫قوائد برنامه نویسی به زبان ‪XML‬‬
‫‪-1‬تمام تگ ها باید تگ بسته داشته باشن‬
‫‪-2‬در ‪ XML‬حرف کوچک و بزرگ با هم متفاوتند و تگ باز و بسته باید با یک نوع حروف از نظر بزرگی و کوچکی نوشته شوند‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪29‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫مثال‬
‫دو تگ زیر با هم فرق دارن‬

‫>‪<Message>This is correct</Message‬‬
‫>‪<message>This is incorrect</Message‬‬

‫‪ -3‬همانطور که در ‪HTML‬ترتیب بستن تگ های باز شده مهم است در ‪XML‬هم مهم است‬
‫‪-4‬تمام برنامه های ‪XML‬باید یک تگ ریشه داشته باشند که تمام تگ های دیگر درون ان قرار گیرد ‪ .‬نام تگ ریشه مانند تمام‬
‫تگ های دیگه اختیاری است‬
‫‪-5‬برخی کاراکترها در ‪XML‬دارای معنای خاصی هستن‬
‫>‪<note‬‬
‫>‪<to>katy</to‬‬
‫>‪<from>john</from‬‬
‫>‪<heading>Reminder</heading‬‬
‫>‪<body>Don't forget me this weekend!</body‬‬
‫>‪</note‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪30‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

‫ در اندروید‬Layout
‫ نوشته میشود‬xml ‫ که با زبان‬Layout ‫هنگامی که قصد داریم که اکتیویتی را ایجاد کنیم و ظاهر آن را طراحی کنیم باید با‬
.‫اینکار را انجام دهیم‬
:‫ ها‬layout ‫لیست‬
LinearLayout



RelativeLayout



TableLayout



ScrollView



GridLayout



FrameLayout



Other(ListView,GridView,Webview)



LinearLayout -1
.‫ عمل میکند که ویجت ها بصورت خطی و به صورت عمودی یا افقی قرار می گیرند‬Box ‫ بصورت یک‬Layout ‫این‬
orientation,: vertical,Horizontal
•fill model, Wrap_content,Fill_parent
•weight,
•gravity,
•padding ,
•margin

31

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫مثال‪:‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪32‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪33‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

:‫ویجت های اندروید‬
Button ‫ویجت‬
<Button android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />

TextView ‫ویجت‬
<TextView android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=“Your Name:" />

ImageView ‫ویجت‬
<ImageView android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawable=“@drawable/ic_launcher" />
EditText ‫ویجت‬
<EditText android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=“Your Name:" />

Relative Layout
.‫ بصورت نسبی عمل میکند و باید ویجت ها را براساس فاصله از هم قرار داد‬layout ‫این مدل‬
:‫به مثال توجه کنید‬

34

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫‪ A‬در باالترین سطح قرار دارد‬
‫‪ C‬زیر ‪ A‬قرار دارد و سمت راست‬
‫‪ B‬زیر ‪ A‬قرار دارد و سمت چپ ‪ B‬قرار دارد‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪35‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫فصل چهارم‬

‫برنامه نویسی اندروید ( ‪) Android Programming‬‬

‫‪Activity‬‬
‫هر اکتیویتی یک کامپوننت از برنامه میباشد که صفحه نمایش را در اختیار میگیرد تا کاربران بتوانند با برنامه ارتباط ‪interact‬‬
‫برقرار کنند‬
‫هر اپلیکیشنی معموال از چندین اکتیویتی تشکیل میشود که با هم در ارتباط هستند‪.‬به طور معمول هر برنامه ای یک اکتیویتی‬
‫اصلی دارد که نقطه اغاز برنامه میباشد‬

‫پاسخگویی در چرخه حیات اکتیویتی ‪ ،activity’s lifecycle callback methods‬شناخته میشود‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪36‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫برای ساخت یک اکتیویتی‪ ،‬باید یک زیر کالس از ‪Activity‬بسازید ‪:‬‬
‫)(‪onCreate‬‬
‫بصورت اجباری باید این متد را اجرا کنید‪ .‬سیستم این متد را زمانیکه درحال ساخت اکتیویتی است‪ ،‬صدا میزند‪ .‬درحین اجرا‪ ،‬شما‬
‫میبایست کامپوننت هایی را که در اکتیویتان معرفی کرده اید‪ ،‬مقدار دهی ( )‪initialize‬کنید‪ .‬از همه مهمتر‪ ،‬اینجا محلی است که‬
‫متد‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪37‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫‪setContentView‬‬
‫بمنظور اجرا و ساخت واسط گرافیکی و کاربری برای این اکتیویتی‪ ،‬میبایست معرفی شود‪.‬‬
‫‪onPause() :‬‬
‫سیستم زمانی این متد را اجرا میکند که کاربر در حال ترک این اکتیویتی است‬
‫مثال) اینجا جایی است که معموالً باید تغییرات مهم مانند قطع موزیک‪ ،‬اجرا شود‬
‫اجرای واسط کاربری ‪user interface‬‬
‫واسط کاربری در یک اکتیویتی از مجموعه ای از ‪view‬ها تشکیل میشود ‪.‬‬
‫هر ‪ view‬محیط مستطیل شکل خودش را در داخل اکتیویتی کنترل میکند و میتواند به درخواست کاربر پاسخ دهد‪ .‬بعنوان‬
‫مثال‪ ،‬یک ‪view‬ممکن است دکمه ای ‪button‬باشد که وقتی کاربر آنرا لمس کرد‪ ،‬یک عملی را اجرا کند‪.‬‬

‫بمنظور استفاده از اکتیویتی در برنامه‪ ،‬قبل از هرچیز اکتیویتی باید به سیستم معرفی شود‪ .‬برای این منظور‪ ،‬فایل مانیفست برنامه‬
‫را باز کنید و المان >‪<activity‬را بعنوان فرزند ‪child‬المان >‪<application‬قرار دهید‪ .‬بعنوان مثال‪:‬‬

‫چندین و چند خصوصیت دیگر هم هستند که میتوانید به المانها اعمال کنید‪ ،‬مانند قرار دادن برچسب ‪label‬برای اکتیویتی‪ ،‬قرار‬
‫دادن آیکون برای برنامه و ایجاد استایل برای واسط کاربری اکتیویتی‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪38‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫بررسی چند واژه مهم اندروید‬
‫اصل و اساس برنامه نویسی اندروید بر پایه جاوا است‪ .‬در این بین چندین و چند واژه وجود دارد که مختص خود اندروید است و در‬
‫جاوا تعریف نشده است‪ .‬از آنجا که – بعضی اوقات – یادگیری واژگان جدید باعث اعصاب خوردی! می شوند‪ ،‬تصمیم دارم به زبان‬
‫ساده و خیلی مختصر مهمترین آنها را توضیح دهم‪ .‬بدیهی است از آنجا که متن کامالً تخصصی است منظور از زبان ساده‪ ،‬سادگی‬
‫درک برای عموم افراد نیست بلکه منظور برنامه نویسان است‪.‬‬
‫اکتیویتی ها)‪(Activities‬‬
‫اکتیویتی‪ ،‬واسط گرافیکی است که کل صفحه نمایشگر را در اختیار بگیرد ‪.‬اکتیویتی میتواند از چندین ‪ View‬تشکیل شده باشد‬
‫یا به ‪ UI‬عملکرد مورد نیازش را بدهد‪ .‬بعنوان مثال برنامه ارسال ایمیل‪ .‬میتواند شامل دو اکتیویتی باشد ‪.‬یکی شامل تمامی ایمیل‬
‫هایی که دریافت کرده ایم‪ ،‬دیگری اکتیویتی که شامل محیط نوشتن ایمیل و ارسال آن باشد‪ .‬هر دو اکتیوی به هم مربوط می‬
‫باشند ولی عملکرد آنها کامالً مستقل از یکدیگر است‪.‬‬
‫سرویس ها)‪(Services‬‬
‫یک سرویس در بک گراند )‪ (background‬اجرا میشود و ‪ UI‬یا واسط کاربری ندارد‪ .‬مثالی برای سرویس ها اطالعی‬
‫)‪(notification‬است که بوسیله زنگ و روشن شدن صفحه نمایشگر در زمان دریافت ‪ SMS‬یا ایمیل و یا زمانیکه کسی با ما‬
‫تماس میگیرد‪ ،‬ارسال میشود‪.‬‬
‫‪Content providers‬تامین کنندگان محتوا‬
‫از طریق ‪ Content provider‬ها دسترسی به تمامی اطالعات ذخیره شده در گوشی –توسط برنامه های دیگر و یا برنامه ای که‬
‫ما مینویسیم – امکان پذیر است ‪.‬برای اینکه سایر برنامه ها بتوانند به اطالعات دسترسی داشته باشند‪ ،‬معموالً اطالعات در فایل ها‬
‫یا دیتابیس ذخیره میشوند‪.‬‬
‫‪ Layout‬ظاهر‬
‫‪Layout‬ها شامل المانهای طراحی واسط کاربری هستند‪ .‬هر زمانیکه یک فایل ‪XML‬برای واسط کاربری ایجاد میکنیم‪ ،‬نیاز‬
‫به ‪ Layout‬داریم تا طراحی ما را در خودش نگه دارد‪ .‬در مورد ‪ Layout‬ها در نوشته های بعدی شرح ییشتری خواهم داد‪ .‬پنج‬
‫نوع ‪ Layout‬مختلف داریم که حتی میتوانند تو در تو بکار گرفته شوند‪.‬‬
‫‪View‬‬
‫‪View‬یک عضو مستقل )‪ (single object‬در واسط کاربری است ‪. View‬در داخل ‪ Layout‬قرار میگیرد و از ترکیب ‪View‬‬
‫ها ساده ترین تا پیچیده ترین واسط های گرافیکی و غیر گرافیکی کاربری ساخته میشود‪ .‬بعنوان مثال‪ ،‬برچسب )‪(Label‬یک نوع‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪39‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪View‬است‪ .‬اندروید این قابلیت را دارد که ما طرحهای گرافیکی خود را بر اساس ‪ XML‬تولید کنیم و در قسمت کد صرفاً به‬
‫عملکرد )‪(functionality‬برنامه بپردازیم و بدین سبب از پیچیدگی برنامه بکاهیم‪.‬‬
‫اتفاقات )‪(Events‬‬
‫‪Event‬ها اتفاقاتی هستند مانند کلیک کردن یا لمس کردن‪ ،‬که برای دریافت این اتفاقات متد ‪ Listener‬آن اتفاق باید تعریف‬
‫شود ‪. Event‬اتفاقی است که از بیرون رخ میدهد؛ چیزی است که کنترل آن دست ما نیست؛ یا حتی چیزیست که ما نمیدانیم‬
‫کی اتفاق میافتد‪ .‬بدین منظور کنترلر های اتفاق )‪(Events controllers‬مورد استفاده قرار میگیرند‪ .‬این امکان وجود دارد که‬
‫برای هر اتفاقی که رخ میدهد به سیستم بگوییم که چه کاری انجام دهد‪ .‬معمول ترین اتفاق دریافت لمس صفحه نمایشگر است که‬
‫برای دریافت آن ‪ Listener‬مورد نیاز باید تنظیم شود‪.‬‬
‫منابع )‪(Resources‬‬
‫منابع‪ ،‬المانهای خارجی هستند که ما در برنامه خود بکار میگیریم‪ .‬آنها در فولدر ”‪ “res‬ذخیره میشوند و میتوانند فایلهای‬
‫تصویری‪ ،‬صوتی مانند عکس‪ ،‬فیلم‪ ،‬انیمیشن و موزیک باشند‪ .‬همچنین فایلهای ‪ XML‬که شامل طراحی های پوسته‪ ،‬واسط‬
‫کاربری و تم ها هستند‪ ،‬در این پوشه ذخیره میشوند‪ .‬وقتی عملیات کامپایل انجام میشود‪ ،‬آنها بطور کامل از طریق کدهای جاوا‬
‫قابل دسترسی هستند‪.‬‬

‫دسترسی و ساماندهی منابع اندروید‬
‫آیتمهای خیلی زیادی وجود دارند که شما برای ساختن یک نرمافزار خوب برای اندروید از آنها استفاده میکنید‪ .‬شما به غیر از‬
‫برنامهنویسی برای ساخت نرم افزار‪ ،‬منابع مختلف دیگر مانند محتوای استاتیک (ثابت) از قبیل بیتمپها‪ ،‬رنگها‪ ،‬تعاریف‬
‫صفحهآرایی‪ ،‬سری ابزار تعاملی کنترل صفحه برای کاربر‪ ،‬آموزشهای انیمیشن و خیلی از این قبیل که کدهای شما استفاده‬
‫میکنند‪ ،‬در نظر میگیرید‪.‬‬
‫این منابع همیشه به صورت مجزا در زیرشاخههای گوناگونی تحت عنوان شاخه ‪ res/‬پروژه محفوظ هستند‪.‬‬
‫این آموزش به شما توضیح خواهد داد که چگونه شما میتوانید منابع نرمافزار خود را ساماندهی کنید‪ ،‬منابع دیگر برای آن تعیین‬
‫نمایید و به این منابع در نرمافزارهای خود دسترسی داشته باشید‪.‬‬

‫ساماندهی منابع‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪40‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫شما باید هر نوع از منبع را در یک زیرشاخه خاص از شاخه ‪ res/‬در پروژه خود قرار دهید‪ .‬برای مثال‪ ،‬اینجا یک سلسله فایل برای‬
‫یک پروژه ساده است‪:‬‬
‫شاخه ‪ res/‬شامل تمام منابع در زیرشاخههای گوناگون است‪ .‬در اینجا ما یک منبع تصویر‪ ،‬دو منبع صفحهآرایی و یک رشته فایل‬
‫داریم‪ .‬جدول زیر جزئیاتی درباره منبع شاخههای پشتیبانى شده در داخل پروژه شاخه ‪ res/‬به ما ارائه میدهد‪.‬‬
‫نوع منبع‬
‫فایلهای ‪ XML‬که ویژگی انیمیشنها را مشخص میکنند در پوشه ‪ res/anim/‬ذخیره شده هستند و در رده‬
‫‪ R.anim‬قابلیت دسترسی دارند‪.‬‬

‫شاخه‬
‫‪anim/‬‬

‫فایلهای ‪ XML‬که وضعیت رنگها را مشخص میکنند در پوشه ‪ res/ color‬ذخیره شده هستند و در رده ‪color/‬‬
‫‪ R.color‬قابلیت دسترسی دارند‪.‬‬
‫فایلهای تصویری مانند ‪ png, .jpg, .gif‬یا فایلهای ‪ XML‬که در بیتمپها جمع شدهاند‪ ،‬لیستها‪ ،‬شکلها و ‪drawable/‬‬
‫قابلیت ترسیم انیمیشن را بیان میکنند‪ .‬آنها در پوشه ‪ res/drawable/‬ذخیره شدهاند و و در رده‬
‫‪ R.drawable‬قابلیت دسترسی دارند‪.‬‬
‫فایلهای ‪ XML‬که میانجی صفحهآرایی یک کاربر را مشخص میکنند‪ ،‬در پوشه ‪ res/layout/‬ذخیره هستند و ‪layout/‬‬
‫از طریق دسته ‪ R.layout‬قابلیت دسترسی دارند‪.‬‬
‫فایلهای ‪ XML‬از قبیل منوی گزینهها‪ ،‬منوی متن یا منو فرعی که منوهای نرمافزار را مشخص میکنند در پوشه ‪menu/‬‬
‫در پوشه ‪ res/menu/‬ذخیره هستند و از طریق دسته ‪ R.menu‬قابلیت دسترسی دارند‪.‬‬
‫فایل های دلخواه برای ذخیره در شکل خام آنها‪ .‬شما برای باز کردن چنین فایلهای خامی به فراخوانی ‪raw/‬‬
‫)(‪ Resources.openRawResource‬با هویت منبع‪ ،‬که ‪ R.raw.filename‬است‪ ،‬احتیاج دارید‪.‬‬
‫فایلهای ‪ XML‬از قبیل رشتهها‪ ،‬اعداد صحیح و رنگها که شامل ارزشهای ساده هستند‪ .‬برای مثال‪ ،‬در اینجا‬
‫بعضی اسم فایل قراردادی برای منابع وجود دارند که شما میتوانید در این شاخه ایجاد کنید‪:‬‬
‫‪‬‬

‫‪ :arrays.xml‬برای آرایه های منابع و قابل دسترس از دسته ‪.R.array‬‬

‫‪‬‬

‫‪ :integers.xml‬برای اعداد صحیح منبع و قابل دسترس از دسته ‪.R.integer‬‬

‫‪‬‬

‫‪ :bools.xml‬برای عملگرهای منطقی منبع و قابل دسترس از دسته ‪.R.bool‬‬

‫‪‬‬

‫‪ :colors.xml‬برای ارزشهای رنگ و قابل دسترس از دسته ‪. R.color‬‬

‫‪‬‬

‫‪ :dimens.xml‬برای ارزشهای بُعد و قابل دسترس از دسته ‪.R.dimen‬‬

‫‪‬‬

‫‪ : strings.xml‬برای ارزشهای رشته و قابل دسترس از دسته ‪. R.string‬‬

‫‪‬‬

‫‪ :styles.xml‬برای سبکها و قابل دسترس از دسته ‪. R.style‬‬

‫فایلهای دلخواه ‪ XML‬که میتوانند در زمان اجرا با فراخوانی )(‪ Resources.getXML‬خوانده شوند‪ .‬شما‬
‫میتوانید فایلهای پیکربندی مختلفی را در اینجا ذخیره کنید که در زمان اجرا استفاده خواهند شد‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪values/‬‬

‫‪xml/‬‬

‫‪41‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫منابع جایگزین‬
‫نرم افزار شما باید منایع جایگزین برای پشتیبانی تنظیمات دستگاه خاص فراهم کند‪ .‬برای مثال‪ ،‬شما باید منابع جایگزین قابل‬
‫ترسیم (تصاویر) برای صفحه نمایش با وضوح مختلف و منابع جایگزین رشته برای زبانهای مختلف در نظر بگیرید‪ .‬در زمان اجرا‪،‬‬
‫اندروید تنظیمات دستگاه موجود را نشان میدهد و منابع مناسب را برای نرمافزار شما بارگذاری میکند‪.‬‬
‫برای مشخص کردن گزینه های پیکربندی خاص برای مجموعهای از منابع‪ ،‬مراحل زیر را دنبال کنید‪:‬‬
‫‪‬‬

‫یک شاخه جدید در ‪ res/ named‬در قالب >‪ <resources_name>-<config_qualifier‬ایجاد کنید‪ .‬در‬
‫اینجا ‪ resources_name‬هر کدام از منابع ذکر شده در جدول باال‪ ،‬مانند صفحهآرایی‪ ،‬قابل ترسیم و غیره خواهد بود‪.‬‬
‫توصیفکننده (‪ ،)qualifier‬یک پیکربندی شخصی برای منابعی که قرار است استفاده شوند مشخص خواهد کرد‪ .‬شما‬

‫‪‬‬

‫میتوانید اسناد رسمی را برای یک لیست کامل از توصیفکنندهها برای انواع مختلف منابع بررسی کنید‪.‬‬
‫منابع جایگزین مربوطه را دراین شاخه جدید ذخیره کنید‪ .‬فایلهای منبع باید به دقیقاً مشابه فایلهای پیشفرض که در‬
‫مثال زیر نشانداده شدهاند نامگذاری شوند‪ ،‬اما این فایلها محتوای خاصی برای جایگزین خواهند داشت‪ .‬برای مثال‪،‬‬
‫اگرچه نام فایل تصویر مشابه خواهد بود اما برای صفحه نمایش‪ ،‬وضوح آن باال خواهد بود‪.‬‬

‫در زیر یک مثال که تصاویر را برای صفحه نمایش پیش فرض و تصاویر جایگزین را برای صفحه نمایش با وضوح باال مشخص‬
‫میکند وجود دارد‪:‬‬
‫‪MyProject/‬‬
‫‪src/‬‬
‫‪MyActivity.java‬‬
‫‪res/‬‬
‫‪drawable/‬‬
‫‪icon.png‬‬
‫‪background.png‬‬
‫‪drawable-hdpi/‬‬
‫‪icon.png‬‬
‫‪background.png‬‬
‫‪layout/‬‬
‫‪activity_main.xml‬‬
‫‪info.xml‬‬
‫‪values/‬‬
‫‪strings.xml‬‬
‫در زیر یک مثال دیگر که صفحهآرایی را برای زبان پیش فرض و صفحهآرایی جایگزین را برای زبان عربی مشخص میکند وجود‬
‫دارد‪:‬‬
‫‪MyProject/‬‬
‫‪src/‬‬
‫‪MyActivity.java‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪42‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪res/‬‬
‫‪drawable/‬‬
‫‪icon.png‬‬
‫‪background.png‬‬
‫‪drawable-hdpi/‬‬
‫‪icon.png‬‬
‫‪background.png‬‬
‫‪layout/‬‬
‫‪activity_main.xml‬‬
‫‪info.xml‬‬
‫‪layout-ar/‬‬
‫‪main.xml‬‬
‫‪values/‬‬
‫‪strings.xml‬‬

‫دسترسی منابع‬
‫در جریان ارتقا نرمافزار‪ ،‬شما احتیاج به دسترسی به منابع مشخص در کدتان یا در فایلهای صفحهآرایی ‪ XML‬خواهید داشت‪.‬‬
‫بخش بعدی‪ ،‬چگونگی دسترسی به منابعتان در هر دو زمینه را توضیح میدهد‪.‬‬

‫منابع دسترسی در کد‬
‫هنگامی که نرمافزار آندروید شما ساخته شد‪ ،‬یک طبقه ‪ R‬تولید میشود که شامل شناسههای منبع برای تمام منابع قابل دسترس‬
‫در شاخه ‪ res/‬شما است‪ .‬شما میتوانید از طبقه ‪ R‬برای دسترسی به منبعی که از زیرشاخه استفاده میکند و نام منبع یا به طور‬
‫مستقیم شناسه منبع استفاده کنید‪.‬‬
‫مثال‪:‬‬
‫برای دسترسی به ‪ res/drawable/myimage.png‬و وارد کردن یک ‪ ImageView‬شما از کد زیر استفاده خواهید کرد‪:‬‬
‫)‪ImageView imageView = (ImageView‬‬
‫;)‪findViewById(R.id.myimageview‬‬
‫;)‪imageView.setImageResource(R.drawable.myimage‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪43‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
‫ در یک‬myimageview ‫ مشخص با شناسه‬ImageView ‫ استفاده میکند تا‬R.id.myimageview ‫ از‬،‫در اینجا خط اول کد‬
‫ که‬myimage ‫ استفاده میکند تا یک تصویر با نام‬R.drawable.myimage ‫ از‬،‫ خط دوم کد‬.‫فایل صفحهآرایی به دست آورد‬
.‫ است به دست آورد‬/res ‫قابل دسترس در زیرشاخه قابل ترسیم زیر‬
:‫مثال‬
:‫ تعریف زیر را دارد توجه کنید‬res/values/strings.xml ‫ جایی که‬، ‫به مثال بعدی‬
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello, World!</string>
</resources>
:‫ مانند زیر وارد کنید‬،‫ با استفاده از یک شناسه منبع‬msg ‫ مقصود با شناسه‬TextView ‫اکنون شما میتوانید متن را روی‬
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

:‫مثال‬
:‫ با تعریف زیر در نظر بگیرید‬res/layout/activity_main.xml ‫یک صفحهآرایی‬
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>

:‫ مانند زیر بارگذاری خواهد کرد‬onCreate() ‫ در روش‬،‫این کد نرمافزار این صفحهآرایی را برای یک فعالیت‬

44

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫{ )‪public void onCreate(Bundle savedInstanceState‬‬
‫;)‪super.onCreate(savedInstanceState‬‬
‫;)‪setContentView(R.layout.main_activity‬‬
‫}‬

‫دسترسی منابع در ‪XML‬‬
‫به منبع فایل ‪ res/values/strings.xml XML‬زیر که شامل یک منبع رنگ و یک منبع رشته است توجه کنید‪:‬‬
‫>?"‪<?xml version="1.0" encoding="utf-8‬‬
‫>‪<resources‬‬
‫>‪<color name="opaque_red">#f00</color‬‬
‫>‪<string name="hello">Hello!</string‬‬
‫>‪</resources‬‬
‫اکنون شما میتوانید این منابع را در فایل صفحهآرایی بعدی برای وارد کردن رنگ متن و رشته متن مانند زیر استفاده کنید‪:‬‬
‫>?"‪<?xml version="1.0" encoding="utf-8‬‬
‫‪<EditText‬‬
‫"‪xmlns:android="http://schemas.android.com/apk/res/android‬‬
‫"‪android:layout_width="fill_parent‬‬
‫"‪android:layout_height="fill_parent‬‬
‫"‪android:textColor="@color/opaque_red‬‬
‫>‪android:text="@string/hello" /‬‬

‫لیست ویو‪Listview :‬‬
‫‪ListView‬در حالت استاندارد به صورت یک لیست متنی میباشد‪ .‬که اطالعات را بصورت آرایه ای میسازد‪.‬لیست ویو بطور وفور‬
‫در بیشتر برنامه های اندرویدی یافت میشود مثال لیست شماره تلفن ها‪ ،‬تماسها و غیره‪ ،‬قرار میگیرد‪.‬‬
‫برای شروع به مثال ساده زیر توجه کنید‪:‬‬
‫در این مثال قصد داریم یک لیست ساده بسازیم که لیست ماه های میالدی را نمایش دهد‬
‫مرحله ‪ ) 1‬ابتدا باید در فایل ‪ main.xml‬خود ویجت لیست ویو را قرار دهیم‪.‬‬
‫کد ‪:‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪45‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainListView">
</ListView>
</LinearLayout>
.‫ )برای نمایش لیست باید به اکتیویتی اصلی که قرار است لیست مربوطه فراخونی شود مراجعه کنیم و لیست را بسازیم‬2 ‫مرحله‬

: ‫کد‬
public class ListActivity extends Activity {
String[] monthsArray = { "JAN", "FEB", "MAR", "APR", "MAY",
"JUNE", "JULY",
"AUG", "SEPT", "OCT", "NOV", "DEC" };
private ListView monthsListView;
private ArrayAdapter arrayAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
monthsListView = (ListView)
findViewById(R.id.mainListView);
arrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, monthsArray);
monthsListView.setAdapter(arrayAdapter);
}
}
:‫شرح کدها‬

46

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

‫ابتدا باید ارایه خود را تعریف کنیم‬1: ‫کد‬
String[] monthsArray = { "JAN", "FEB", "MAR", "APR", "MAY",
"JUNE", "JULY",
"AUG", "SEPT", "OCT", "NOV", "DEC" };
:‫لیست ویو را تعریف کنیم‬2: ‫کد‬
private ListView monthsListView;
:‫ ایجاد میکنیم‬Arraylist ‫یک متغیر سراسری از نوع‬3: ‫کد‬
private ArrayAdapter arrayAdapter;
:‫در مرحله آخر لیست را میسازیم‬4: ‫کد‬
arrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, monthsArray);
monthsListView.setAdapter(arrayAdapter);

47

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

‫منوها در اندروید‬
:‫در اندروید چند نوع منو وجود دارد‬
1- Option Menu :
.‫این منو در بیشتر برنامه های کاربردی وجود دارد و یکی از الزامات اپلیکیشن های موبایل میباشد‬
:‫تصویر نمونه زیر یک مثال را نمایش میدهد‬

:‫برای ایجاد منو باید کارهای زیر انجام شود‬
‫ انتخاب کنید تا‬Source->override/implements Methiods ‫ را از منوی‬onCreateOptionsMenu ‫باید تابع‬1-1 :
.‫تابع مربوطه اضافه گردد‬
‫ گزینه منو را اضافه می کنیم‬0 ‫برای مثال‬
: ‫کد‬
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(1,searchBtnId ,searchBtnId,"Search");
menu.add(2,scheduleBtnId ,scheduleBtnId,"List Chanell");
menu.add(group2Id,playBtnId ,playBtnId,"Play");
menu.add(group2Id,stopBtnId ,stopBtnId,"test2");
// the following line will hide search
// when we turn the 2nd parameter to false
menu.setGroupVisible(1, false);
return super.onCreateOptionsMenu(menu);
}
:‫ کار مورد نظر را انجام بده‬،‫بعد نوبت به این است که وقتی رو گزینه مورد نظر کلیک شد‬1-2 :
‫ انتخاب کنید و گزینه را انتخاب کنید‬Source->override/implements Methiods ‫برای اینکار نیز از منوی‬
.‫تا تابع مربوطه اضافه گردد‬onOptionsItemSelected
: ‫کد‬
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId())
{
case 1:
Toast.makeText (getApplicationContext(),"TV 2" ,
Toast.LENGTH_LONG).show ();
break;
case 2:

48

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
final Intent intent1 = new Intent(this,
HomeActivity.class);
startActivity(intent1);
break;
case 3:
//txt.setText("you clicked on item "+item.getTitle());
break;
}
return super.onOptionsItemSelected(item);
}
:‫برای افزودن ایکن نیز به منو باید‬
: ‫کد‬
menu.add(1, 1, 0, "Blu-Ray").setIcon(R.drawable.bluray);

:‫ساخت دیالوگ سفارشی‬
‫ک دیالوگ یک ابزار آماده هست تو تمام اکتیویتی ها‬
‫( ساخته می شوند و مقداری رو بر میگردانند‬onCreateDialog(int ‫دیالوگ ها با دستور‬
‫اغلب از مدیریت پیش فرض در دیالوگ استفاده میکنیم و حالت دیالوگ و تم اون داخل اکتیویتی ثابت می مانند‬
‫( برمیگردونه و شما شئ دیالوگ فراخوانی می کنید‬onCreateDialog(int ‫یک دیالوگ اولین دفعه‬
‫( اسفاده میکنیم و یک عدد رو ارسال میکنید‬showDialog(int ‫واسه نشون دادن دیالوگ از دستور‬
‫ دیالوگ و واحد کردن شناسه استفاده می کنیم‬id ‫این عدد جهت واحد کردن‬
package com.objectechenica.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;

49

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
import android.widget.Button;
import android.widget.Toast;

public class DialogActivity extends Activity {

// Constant for identifying the dialog
private static final int DIALOG_ALERT = 10;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button alertDialog = (Button)findViewById(R.id.alertDialogBtn);
alertDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG_ALERT);
}
});
}

@Override

50

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_ALERT:
Builder builder = new AlertDialog.Builder(this);
builder.setMessage("This will end the activity");
builder.setCancelable(true);
builder.setPositiveButton("I agree", new OkOnClickListener());
builder.setNegativeButton("No, no", new CancelOnClickListener());
AlertDialog dialog = builder.create();
dialog.show();
}
return super.onCreateDialog(id);
}

private final class CancelOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Activity will continue", Toast.LENGTH_LONG).show();
}
}

private final class OkOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {

51

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
Toast.makeText(getApplicationContext(), "I was just kidding", Toast.LENGTH_LONG).show();
}
}

}

52

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪SharedPreferences‬در اندروید‬

‫دوستان فرض کنید در برنامه خود قابلیت تعیین اندازه فونت توسط کاربر در نظر گرفته شده است ‪ ،‬پس بنابراین شما باید اندازه‬
‫فونت و یا نوع فونت را که کاربر در نظر گرفته است را ذخیره نمایید تا با اجرای دوباره برنامه تغیرات اعمال گردیده باشد و تغییرات‬
‫را حفظ نماید‬
‫برای این کار روشهای مختلفی وجود دارد‪:‬‬
‫میتونید اطالعات را در یک فایل ذخیره کنید که این روش پیشنهاد نمیشه چون دردسر های خاص خودشو داره از جمله نوشتن در‬
‫فایل ‪،‬خواندن از فایل و ‪ ...‬که اگه تعداد تنظیمات برنامه زیاد بشه کار مطلوبی به نظر نمیاد‬
‫راه دوم استفاده از بانک اطالعاتی میباشد که استفاده از این روش بهتر از روش قبل میباشد ولی میتوانید از یک حافظه موقت برای‬
‫اینکار استفاده کنید‪.‬‬
‫با استفاده از ‪ SharedPreferences‬میتونید بدین صورت مقادیر رو ذخیره کنید‬
‫در تکه کدی که ضمیمه گردیده است یک ‪ EditText‬رو قرار دادایم که با زدن کلید ‪set‬این مقدار ذخیره میشه و با هر بار اجرای‬
‫این برنامه مقار ‪ Set‬شده نمایش داده میشه‬
‫;‪package com.example.sharedpreferences‬‬

‫;‪import android.os.Bundle‬‬
‫;‪import android.app.Activity‬‬
‫;‪import android.content.SharedPreferences‬‬
‫;‪import android.content.SharedPreferences.Editor‬‬
‫;‪import android.view.View‬‬
‫;‪import android.view.View.OnClickListener‬‬
‫;‪import android.widget.Button‬‬
‫;‪import android.widget.EditText‬‬

‫{‪public class MainActivity extends Activity‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪53‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
EditText edt_name;

@ Override
protected void onCreate(Bundle savedInstanceState{ )
super.onCreate(savedInstanceState;)
setContentView(R.layout.activity_main;)

edt_name=(EditText)findViewById(R.id.edit1;)

SharedPreferences pref = getApplicationContext().getSharedPreferences(
" user", 0;)
final Editor editor = pref.edit;)(

String name=pref.getString("key_name;)"" ,"

if(name.length()<0)
{

}

54

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
else
{
edt_name.setText(name;)
}

Button b1 = (Button) findViewById(R.id.btn1;)
b1.setOnClickListener(new OnClickListener{ )(

public void onClick(View v{ )

editor.putString("key_name", "set;)"
editor.commit;)(

}
;)}

}
}

55

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫تفاوت واحدهای اندازه گیری ‪ (px,in‬و ‪ )...‬در اندروید؟‬
‫‪px :‬واحد پیکسل و وابسته به تعداد پیکسل های نمایشگر‬
‫‪in :‬واحد اینچ مبتنی بر اندازه فیزیکی نمایشگر‬
‫‪mm :‬واحد میلیمتر مبتنی بر اندازه فیزیکی نمایشگر‬
‫‪pt :‬واحد نقطه برابر با ‪ 72/1‬یک اینچ و مبتنی بر اندازه فیزیکی نمایشگر‬
‫‪dpi :‬چگالی صفحه نمایش‪،‬یعنی مقدار نسبت پیکسل ها به مساحت فیزیکی صفحه نمایش‬
‫‪dp :‬پیکسل های چگال و مستقل )‪(Density-independent Pixels‬یک واحد انتزاعی مبتنی بر چگالی صفحه نمایش‪.‬این‬
‫واحد متناسب با تعداد پیکسل ها در نمایشگر با چگالی ‪ 163‬است‪.‬بنابراین یک ‪ dp‬در یک نمایشگر با چگالی ‪ 163‬در واقع یک‬
‫پیکسل است و در یک نمایشگر با چگالی ‪،023‬دو پیکسل می باشد‪.‬دقت کنید که گاه به جای ‪ dp‬از(‪ dip‬مختصر ‪Device‬‬
‫)‪Independent Pixels‬هم استفاده می شود‪.‬ولی در واقع هر دو یک مفهوم دارند‪(.‬منبع)‬
‫در کل فرمول‬
‫‪|(px = dp * (dpi / 160‬‬
‫رابطه بین ‪ px,dp‬و ‪ dpi‬را نشان می دهد‪.‬بهترین گزینه برای طراحی واسط کاربر )‪(UI‬استفاده از واحد ‪ dp‬است که نمایش‬
‫متناسب با نمایشگرهای مختلف با چگالی های متفاوت را تضمین می کند‪.‬‬
‫‪sp‬و ‪ sip :‬چیزی شبیه به ‪ dp‬است و برای مشخص کردن اندازه قلم به کار می رود‪.‬ولی با این تفاوت که با تنظیمات اندازه‬
‫قلم )‪ (font size‬کاربر نیز هماهنگ است در نتیجه خروجی‪،‬متناسب با چگالی نمایشگر و اندازه قلم تنظیم شده توسط کاربر‬
‫خواهد بود ‪.‬‬
‫در مجموع استفاده از ‪ dp‬و ‪ sp‬به طور موکد توصیه شده است زیرا باعث می شود برنامه شما در گوشی های مختلف دارای تناسب‬
‫اندازه یکسانی باشد(چه اندازه کنترل ها و چه اندازه متن) و همچنین در صورتی که اندازه قلم توسط کاربر در دستگاه تغییر‬
‫کند‪،‬تغییرات در برنامه نیز اعمال می شود ‪.‬‬

‫استفاده از قابلیت لرزش دستگاه‬
‫برای استفاده از حالت لرزش دستگاه باید از توابع زیراستفاده نمود‪:‬‬
‫در ابتدا باید مجوزی در مانیفست درخواست شود‬
‫کد ‪:‬‬
‫>‪<uses-permission android:name="android.permission.VIBRATE" /‬‬
‫پس از آن استفاده از لرزاننده دستگاه‪ ،‬فقط سرویسی دیگر از سیستم اندروید است که توسط چارچوب فراهم می شود‪ .‬این کار می‬
‫تواند توسط ‪ VIBRATor‬انجام شود‪:‬‬
‫کد ‪:‬‬
‫)‪(Vibrator v = (Vibrator‬‬
‫‪getSystemService(Context.VIBRATOR_SERVICE‬‬
‫با یک نمونه ‪ VIBRATor‬تنها متد ‪ ()Vibrator‬را برای آغاز لرزش دستگاه فراخوانی کنید‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪56‬‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
(v.vibrate(300

‫ در اندروید‬notification ‫ساخت‬
.‫یک راه خوب برای مطلع سازی کابر در مورد عملیات خاصی(مثل آپدیت برنامه ) هست‬status bar notification
.‫پروژه جدیدی ایجاد کنید‬
‫ قرار دهید‬xml‫کد زیر را در فایل‬
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity> "

< TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="notification in android>/ "

< Button

57

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
android:id=”@+id/btnNot”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/textView1”
android:layout_centerHorizontal=”true”
android:layout_marginTop=”78dp”
android:text=”Button>/ ”

/<RelativeLayout>

‫ کد زیر را در فایل‬java ‫قرار دهید‬.
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity{

58

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬

private static final int NOTIFICATION_ID = 1;
@ Override
public void onCreate(Bundle savedInstanceState{ )
super.onCreate(savedInstanceState;)
setContentView(R.layout.activity_main;)
notification ‫تعریف تنظیمات برای‬

int icon = R.drawable.ic_launcher;

‫آدرس آیکن موردنظر جهت نمایش در استاتوس بار‬

CharSequence tickerText = "This is a sample notification;"
long when = System.currentTimeMillis;)(
Context context = getApplicationContext;)(
CharSequence contentTitle = "Sample notification;"
CharSequence contentText = "This notification has been generated as a result of button click;".
Intent notificationIntent = new Intent(this, MainActivity.class;)
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0;)
‫با استفاده از تنظیمات باال‬Notification ‫مقداردهی اولیه‬

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent;)

59

‫دوره آموزشی برنامه نویسی اندروید‬

p30droid.com ‫انجمن برنامه نویسی اندروید‬
NotificationManager ‫بازیابی مرجع از‬

String ns = Context.NOTIFICATION_SERVICE;
final NotificationManager mNotificationManager = (NotificationManager)
getSystemService(ns;)

Button statusbarnotify = (Button) findViewById(R.id.btnNot;)
statusbarnotify.setOnClickListener(new View.OnClickListener{ )(
public void onClick(View v{ )
mNotificationManager.notify(NOTIFICATION_ID, notification;)
}
;)}
}
}

.‫خروجی به صورت زیر می باشد‬

60

‫دوره آموزشی برنامه نویسی اندروید‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪61‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دیتابیس اندروید‬

‫در اندروید ‪ 4‬روش برای ذخیره اطالعات وجود دارد‪:‬‬
‫‪1- Shared preferences‬‬
‫‪2- Sqlite Databases‬‬
‫‪3- Content Provider‬‬
‫‪4- Files‬‬
‫که بیشتر بر روی )‪ Sqlite(http://www.sqlite.org‬کار خواهیم کرد و بقیه را در آموزش های بعدی معرفی خواهم کرد‪،‬بحث‬
‫دیتابیس بدلیل گستردگی‪ ،‬نمی توان در یک آموزش بیشتر مباحث را شرح داد پس مرحله به مرحله پیش می رویم و در مرحله‬
‫اول با ساختار دیتابیس و پیشنیازهای اولیه کار خواهیم کرد‪.‬‬
‫دیتابیس‪Sqlite :‬‬
‫‪Sqlite‬یک موتور دیتابیسی کوچک ولی قوی بود که توسط دکتر ریچارد هیپ در سال ‪2000‬میالدی ایجاد شد ‪. Sqlite‬ابتدا‬
‫توسط اپل برای ‪ ، iphone‬موبایل های ‪،Symbian‬موزیال فایرفاکس ‪،Mac OS X ،Adobe Air ،PHP ،Skype ،‬‬
‫‪Solaries‬و بیشتر محیط های برنامه نویسی دیگر نیز استفاده می شد‪.‬که در اندروید نیز از همین دیتابیس استفاده خواهد شد‪.‬‬
‫برای مدیریت دیتابیس ‪ sqlite‬باید از برنامه های زیر استفاده کنید‪:‬‬
‫‪1- SqliteAdmin‬‬
‫‪2- sqliteBrowser‬‬
‫‪3‬یک ‪ ADD-ONS Mozilla‬به نام ‪SQLite Manager‬‬‫‪4-‬و‪. . .‬‬

‫بیشتر این ایتم های بررسی خواهند شد و مثال های کاربردی نیز ارائه خواهد شد و برای شروع با متدها و کالس های دیتابیس‬
‫آشنا خواهیم شد‪.‬‬
‫ چگونه دیتابیس را باز کنیم‬‫روش اول)‬
‫کد‪:‬‬
‫(‪public staticSQLiteDatabase.openDatabase‬‬
‫)‪Stringpath, SQLiteDatabase.CursorFactoryfactory, intflags‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪62‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫پارامتر ها ‪:‬‬
‫‪ : Path‬مسیر دیتابیس‬
‫‪ : Factory‬یک متد اختیاری برای وقتی که ‪ Cursor‬یک شرط را فراخوانی می کند استفاده می شود( ‪ cursor‬بعدا بررسی‬
‫خواهد شد)‬
‫‪ : Flags‬برای کنترل کردن حالت دسترسی به دیتابیس‬
‫که سه حالت دارد ‪:‬‬

‫کد‪:‬‬
‫‪OPEN_READWRITE‬‬
‫ ‪OPEN_READONLY‬‬‫‪CREATE_IF_NECESSARY -‬‬

‫مثال ‪ ) 1‬ایجاد کردن دیتابیس ‪: Sqlite‬‬
‫شرح کدها ‪:‬‬
‫ابتدا باید یک متغیر از نوع ‪ SQLiteDatabase‬با اسم ‪ db‬بصورت عمومی اعالن کنیم‪ ،‬تا بتوانیم در قسمت های دیگر کالس‬
‫ازش استفاده کنیم‪.‬‬
‫سپس در متد ‪ OnCreate‬باید دیتابیس باز کنیم( دیتابیس که قبال وجود دارد) اگر وجود نداشت آنرا ایجاد خواهد کرد‪.‬‬
‫ارگومان‬
‫"‪/"data/data/cis493.sqldatabases/myfriendsDB‬‬
‫مسیر دیتابیس را که با نام ‪ myfriendsDB‬ایجاد کرده ایم را باز می کند‪ .‬و پوشه های ‪ data‬که آمده ‪ ،‬برای این است که در‬
‫حین اجرای برنامه در آن مسیر قرار گرفته‪.‬برای دستیابی به این مسیر در ایکلیپس باید آیکن ‪ DDMS‬را که در باالی برنامه قرار‬
‫دارد را انتخاب کرده ‪ ،‬سپس در کادر باز شده روی تب ‪ File Exploree‬رفته و می توانید مسیر را مانند نمونه باال پیدا کنید که‬
‫باید در مسیر ‪ data‬نام پروژه خود را انتخاب و سپس در پوشه ‪ database‬نام دیتابیس قرار داده شده را مشاهده کنید‪.‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪63‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫ متد ‪ : ;)(db.close‬بستن دیتابیس‬‫روش دوم) روش دوم برای بازکردن‪ /‬ایجاد کردن دیتابیس در داخل برنامه بصورت زیر میباشد‬

‫ اجرای دستورات ‪:‬‬‫بعد از اینکه دیتابیس باز‪/‬ایجاد شد ‪ ،‬می توان روی دیتابیس اعمال ‪ :‬ایجاد جداول‪،‬حذف جداول‪ ،‬افزودن اطالعات و ‪ ...‬قابل انجام‬
‫خواهد بود‪.‬‬
‫‪ -1‬ایجاد جدول ‪:‬‬
‫کال برای کار با ‪ sqlite‬باید با زبان ‪ sql‬آشنایی کافی داشته باشید‪.‬برای ایجاد جدول مانند زیر از دستور ‪:‬‬

‫کد‪:‬‬
‫(‪create table tblAMIGO‬‬
‫‪recIDinteger PRIMARY KEY autoincrement,‬‬
‫‪name text,‬‬
‫‪;) phone text‬‬

‫استفاده می کنیم‪.‬این دستور یک جدول با نام ‪ tblAMIGO‬را که دارای سه فیلد میباشد ایجاد می کند‪.‬‬
‫نوشتن دستور در برنامه نویسی ‪:‬‬
‫کد‪:‬‬
‫("‪db.execSQL("create table tblAMIGO‬‬
‫‪integer PRIMARY KEY autoincrement" ,‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪" +recID‬‬

‫‪64‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫‪" +name text" ,‬‬
‫); " );‪" +phone text‬‬

‫شی ‪ db‬را قبال ایجاد کرده ایم و توسط متد ‪ execSQL‬می توان دستورات ‪ sql‬را نوشت‪.‬از این متد برای اجرای دستور استفاده‬
‫می شود‪.‬‬
‫‪ -2‬افزودن اطالعات ‪ :‬برای این کار دقیقا مانند مثال باال عمل می کنید و دستور ‪ insert‬را اجرا می کنید ‪:‬‬
‫' );" );‪db.execSQL( "insert into tblAMIGO(name, phone) values ('AAA', '555‬‬
‫این خط باعث افزودن یک رکورد اطالعاتی به جدول مربوطه می شود‪ .‬که فیلد اول بصورت یکتا میباشد ‪ ،‬فیلد دوم ‪ AAA‬و فیلد‬
‫سوم ‪ 555‬در آن قرار می گیرد‪.‬‬
‫مثال های زیر هم ‪:‬‬
‫' );" );‪db.execSQL( "insert into tblAMIGO(name, phone) values ('BBB', '777‬‬
‫' );" );‪db.execSQL( "insert into tblAMIGO(name, phone) values ('CCC', '999‬‬
‫دو رکورد در آن قرار می دهند‪.‬‬
‫** برای افزودن اطالعات به جدول مثال یک اطالعات خاصی که کابر وارد کند باید یک ‪ textview‬را تعریف کرد و در دستور‬
‫' );" );‪db.execSQL( "insert into tblAMIGO(name, phone) values (t1.getText(), '777‬‬
‫اصالعات آن را در فیلد مربوطه قرار داد‪.‬‬
‫فیلدهای پشتیبان کننده ‪: Sqlite‬‬
‫‪text,varchar, integer, float, numeric, date, time, timestamp, blob, boolean‬‬
‫که بیشترشون مشخص هستند و نیاز به توضیح خاصی در مورد کاربردشون نیست‪.‬‬
‫بهتره همیشه موقعی که دستورات نوشته بشه درون یک ‪ try /catch‬نوشته بشه و برنامه ‪ crash‬نکنه و بتونید برنامه را مدیریت‬
‫کنید تا از بروز خطا و خروج از برنامه جلوگیری بشه‪.‬‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪65‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫مانند مثال زیر )‬
‫کد‪:‬‬
‫{‪try‬‬
‫‪//perform your database operations here...‬‬
‫}‬
‫)‪catch(SQLiteException e‬‬
‫{‬
‫‪//report problem‬‬
‫}‬
‫{‪finally‬‬
‫();‪db.endTransaction‬‬
‫}‬

‫دیتابیس اندروید‪-‬بخش دوم‬

‫ابتدا یک پروژه جدید را ایجاد کنید و اسم آن را مثال ‪ dbAndroid‬بگذارید‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪66‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫سپس ورژن اندروید خود را مشخص کنید‪...‬که در این پروژه ‪ 2.3.3‬را در نظر گرفته ایم‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪67‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫در مرحله آخر نام پکیج و اکتیویتی خود را وارد کنید‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪68‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دکمه ‪finish‬را بزنید تا پروژه شما اماده شود‪.‬‬
‫اولین قدم برای اینکه بتوانیم از ‪sqlite‬استفاده کنیم این است که یک کالس جدید را ایجاد کنید‪.‬برای اینکار روی نام پکیچ‬
‫کلیک راست و گزینه ‪ new ->class‬را انتخاب کنید تا کادر زیر ظاهر شود‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪69‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫بعد از ایجاد کردن کالس باید از کالس ‪ SQLiteOpenHelper‬ارث بری کنیم ‪.‬بعد از اینکار رنگ قرمزی روی نام کالس ظاهر‬
‫میشود که برای این میباشد که حتما باید توابع سازنده را ایجاد کنید‪.‬که بعد از اینکار سه تابع که در تصویر نشان داده شده اضافه‬
‫میشوند‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪70‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫بعد از اینکار ها بهتر است در قسمت ‪general‬متغیر هایی را بصورت سراسری تعریف کنیم تا در کالس های دیگر نیز بتوانیم‬
‫فراخوانی کنیم‪.‬ابتدا در تابع ‪onCreate‬دستور مربوطه به ایجاد جدول را بنویسید و در تابع ‪onUpgrade‬هم دستور مربوط به‬
‫پاک کردن اطالعات جدول را بنویسید‪.‬بعد از اینکار ها میتونید در هر جای برنامه فقط با صدا زدن نام کالس و ایجاد کردن یک‬
‫شی از آن میتوانیم از دیتابیس اندروید به راحتی استفاده کنید‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪71‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫بعد از نوشتن دستورات باال به سراغ طراحی کردن یک ‪ UI‬ساده میرویم تا با وارد کردن اطالعات در دو ‪ EditText‬اطالعات را در‬
‫دیتابیس ذخیره کنید‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪72‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫خروجی ‪UI‬بدین صورت میباشد‪.‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪73‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫کار بدین صورت میباشد که وقتی کاربر روی دکمه ‪ save‬کلیک کرد اطالعات در دیتابیس ذخیره میشود‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪74‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫در خط ‪ : 13‬ابتدا باید یک شی جدید از کالس قبلی را ایجاد کنیم‬
‫خط ‪ : 14‬یک متغیر از نوع ‪SQLiteDatabase‬را تعریف میکنیم تا بتوانیم عملیات های مختلف پایگاه داده را انجام دهیم‬
‫خط ‪ : 15‬برای اینکه بتوانیم اطالعات را در مکانی قرار دهیم بعد ذخیره شود از ‪ContentValues‬استفاده میکنیم‬
‫در تابع ‪OnCreate‬هم ابتدا خاصیت مربوط به دکمه را در حالتی وقتی که روی آن کلیک کردیم قرار میدهیم‬
‫بعد از این کارها نوبت به نوشتن کدهای ثبت اطالعات میباشد ‪ ،‬بعد از انتخاب دکمه مربوطه یک پیغام چاپ میشود مینی بر اینکه‬
‫دوره آموزشی برنامه نویسی اندروید‬

‫‪75‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬
‫اطالعات ثبت شد‪.‬‬
‫خط ‪ :33‬در این خط ما به شی ‪ db‬میگوییم که میتواند که اطالعات را در دیتابیس بنویسد‬
‫خط ‪ :34‬در این خط شی ‪content‬را ایجاد میکنیم تا مقادیر را در آن قرار دهیم‬
‫خط های ‪ 35‬و ‪ 33‬مقادیر مربوط به فیلدهای ‪ name,lname‬را قرار میدهد‬
‫خط ‪ : 37‬اطالعات در دیتابیس ذخیره میکند‬
‫خط ‪ : 38‬یک پیغام را توسط ‪Toast‬چاپ میکند‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪76‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫فصل پنجم‬

‫کسب درآمد از نرم افزارهای موبایل‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪77‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪78‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪79‬‬

‫انجمن برنامه نویسی اندروید ‪p30droid.com‬‬

‫منابع‪:‬‬
‫انجمن برنامه نویسی اندروید ‪P30droid.com‬‬
‫مرجع توسعه دهندگان اندروید ‪Developer.android.com‬‬
‫کماالن ‪Kamalan.com‬‬

‫این آموزش به مناسبت دومین سالگرد انجمن برنامه نویسی اندروید تهیه گردیده است‬
‫‪ 22‬اسفند ‪1333‬‬

‫دوره آموزشی برنامه نویسی اندروید‬

‫‪80‬‬

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close