شنبه, 26 ارديبهشت 808 04:17

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

دوره آموزش برنامه نویسی Flutter جمله جدیدترین تکنولوژی های برنامه نویسی موبایل میباشد این تکنولوژی توسط شرکت گوگل توسعه داده شده است و با استفاده از زبان برنامه نویسی دارت توانایی تولید اپلیکیشن های اندروید و iOS را داشته باشید.این تکنولوژی در محیط اندروید استودیو قابل توسعه است.

اهداف کلی دوره

  • آشنایی با محیط برنامه نویسی اندروید استودیو
  • آشنایی با فایل های APK
  • آموزش زبان برنامه نویسی Dart
  • ذخیره سازی اطلاعات در دیتابیس
  • ایجاد خروجی برای اندروید و  iOS
  • پیاده سازی وب سرویس در فلاتر
flutter

سرفصل های دوره آموزشی Flutter به صورت کاملا عملی:

این دوره توصیه میشود به :

  • اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با موبایل هستند.
  • اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط Flutter دارند.
  • اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید و ios دارند.
  • شركتها و سازمانهایی كه قصد راه اندازی اپلیکیشن موبایل اختصاصی خود را دارند.
  • اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید و ios دارند.
  • اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل اندروید و ios تبدیل كنند.

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

منتشر شده در 2دوره های آموزشی
دوشنبه, 01 مرداد 777 07:02

دوره آموزشی نوجوانان اندروید

دوره برنامه نویسی اندروید یکی از جذاب ترین دوره های آموزشی میباشد که مخاطبان دوره میتوانند در این دوره اصول طراحی اپلیکیشن های تحت اندروید را طراحی و پیاده سازی نموده و شروع به کسب درآمد در حوزه اپلیکیشن های موبایل نمایند. کاربران نوجوان بین سنین 12 تا 18 این دوره میتوانند با کسب مهارت های مطرح شده در سرفصلهای دوره گام بزرگ و سریعی جهت ورود به بازار اپلیکیشن های اندرویدی برداشته و با انتشار برنامه های طراحی شده خود در فضای مجاری کسب درآمد کنند. هم اینک ده ها هزار نرم افزار تحت موبایل در فضای اینترنتی منتشر شده که تعداد بی شماری از این نرم افزارها با دانلود های حیرت آور منبع درآمدهای چندین میلیونی برای طراح خود بوده اند. این دوره شامل چهار ترم میباشد که در دو ترم اول مقدمات برنامه نویسی جاوا و اندروید به دانشجویان تدریس میگردد و در دو ترم بعدی مراحل تولید یک اپلیکیشن تجاری با استاندارد های بین اللملی و همسو با استاندارد های AndroidATC آمریکا تدریس میگردد.در انتهای دوره دانشجویان موطف به ارائه اپلیکیشن و دفاع از آن میباشند و پس از موفقیت در این مرحله مجوز حضور در آزمون بین اللملی AndroidATC را دریافت میکنند تا گواهی نامه بین المللی اندروید دریافت نمایند.ثبت نام هم اکنون از ترم اول این دوره شروع میگردد اگر قصد ورود به بازار نرم افزارهای موبایل دارید هم اینک در دروه آموزشی برنامه نویسی اندروید شرکت کنید.

این دوره توصیه میشود به :

  • دانش آموزانی كه علاقه مند به آشنایی و كار با اندروید هستند.
  • دانش آموزانی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط اندروید دارند.
  • دانش آموزانی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید دارند.
  • دانش آموزانی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده اندروید فعالیت كنند.
  • دانش آموزان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید دارند.
  • دانش آموزانی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید دارند.و...
coursesAndroid

اهداف کلی دوره

  • مفهوم برنامه نویسی
  • آشنایی با زبان جاوا
  • شرط ها در زبان جاوا
  • حلقه های تکرار در زبان جاوا
  • مفهوم کلاس در جاوا

سرفصل های دوره به صورت کاملاٌ عملی

دانلود سرفصل های آموزشی دوره

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

منتشر شده در 2دوره های آموزشی

دوره آموزشی Java Fundamentals for Android Development یکی از ضروری ترین و مهمترین دوره های آموزشی برنامه نویسی میباشد که باید تمامی توسعه دهندگان اندروید از دانش زبان برنامه نویسی جاوا برخوردار شوند.لذا با شرکت در این دوره از صفر میتوانید برنامه نویسی را شروع کنید و قدم به قدم وارد دنیای برنامه نویسان جهان شوید و راه زندگی جدید خود را با ورود با جاوا شروع کنید.زبان جاوا یکی از بزرگترین جامعه های برنامه نویسان دنیا را شامل میشود و با دانش فنی که با آموختن زبان جاوا کسب میکنید میتوانید از این دانش در تمامی زمینه های برنامه نویسی و سیستم عامل های مختلف استفاده کنید.جاوا زبان اول توسعه اپلیکیشن های موبایل بر بستر اندروید میباشد

coursesAndroid

این دوره توصیه میشود به :

  • اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با برنامه نویسی هستند.
  • اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط اندروید دارند.
  • اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید دارند.
  • اشخاصی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده اندروید فعالیت كنند.
  • شركتها و سازمانهایی كه قصد راه اندازی واحد برنامه نویسی اختصاصی خود را دارند.
  • دانشجویان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید دارند.
  • اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید دارند.
  • اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل اندروید تبدیل كنند.

اهداف کلی دوره

  • پیاده سازی سرویس های گوگل FireBase و  Google Map
  • پیاده سازی Dependency Inject  با کتابخانه Dagger 2
  • پیاده سازی ارتباط غیر همزمانی  با سرویس Restfull و کتابخانه  Retrofit
  • پیاده سازی ارتباط همزمانی  با سرویس Websocket
  • توانایی ورود به بازار کار طراحی اپلیکیشن اندروید

سرفصل های دوره به صورت کاملاٌ عملی

دانلود سرفصل های آموزشی دوره

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

منتشر شده در 2دوره های آموزشی
یکشنبه, 02 مرداد 776 07:02

دوره آموزشی Hybrid Mobile Programming

دوره برنامه نویسی Hybrid Mobile Programming یکی از جذاب ترین دوره های آموزشی میباشد که مخاطبان دوره میتوانند در این دوره اصول طراحی اپلیکیشن های تحت پلتفرم های موبتل میباشد را طراحی و پیاده سازی نموده و شروع به کسب درآمد در حوزه اپلیکیشن های موبایل نمایند.کاربران این دوره میتوانند با کسب مهارت های مطرح شده در سرفصلهای دوره گام بزرگ و سریعی جهت ورود به بازار اپلیکیشن های اندرویدی برداشته و با انتشار برنامه های طراحی شده خود در فضای مجاری کسب درآمد کنند.هم اینک ده ها هزار نرم افزار تحت موبایل در فضای اینترنتی منتشر شده که تعداد بی شماری از این نرم افزارها با دانلود های حیرت آور منبع درآمدهای چندین میلیونی برای طراح خود بوده اند.اگر قصد ورود به بازار نرم افزارهای موبایل دارید هم اینک در دروه آموزشی برنامه نویسی Hybrid Mobile Programming شرکت کنید.

پیشنیاز: آشنایی با مفاهیم برنامه نویسی - آشنایی ابتدایی با html/css/j-avascript

coursesAndroid

این دوره توصیه میشود به :

  • اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با اندروید هستند.
  • اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا را  دارند.
  • اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید،iOS و ویندوز فون را دارند.
  • اشخاصی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده موبایل فعالیت كنند.
  • شركتها و سازمانهایی كه قصد راه اندازی اپلیکیشن موبایل اختصاصی خود را دارند.
  • دانشجویان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید، iOS، و ویندوز فون را دارند.
  • اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب تمامی پلتفرم های موبایل را دارند.
  • اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل تبدیل كنند.
  • و...

اهداف کلی دوره

  • آموزش سیستم عامل های موبایل اندروید، ای اوس و ویندوز فون
  • آشنایی با Html/css/j-avascript
  • تسلط کامل به Cordova
  • تسلط کامل به فریمورک ionic
  • آشنایی کامل با پلتفرم های موبایل و توسعه اپلیکیشن های مالتی پلتفرم
  • پیاده سازی دیتابیس SQLite
  • طراحی برنامه برای دستگاه های اندرویدی
  • توانایی ورود به بازار کار طراحی اپلیکیشن موبایل

سرفصل های دوره به صورت کاملاٌ عملی

دانلود سرفصل های آموزشی دوره

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

منتشر شده در 2دوره های آموزشی
دوشنبه, 28 -2666 08:50

دوره جامع اندروید

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

چرا باید در این دوره شرکت کنم؟

  • استفاده از آخرین ابزارهای توسعه اپلیکیشن روز دنیا
  • آپدیت ترین سرفصل های آموزشی براساس مستندات گوگل
  • بیش از ۱۰۰ ساعت آموزش مطالب های تخصصی برنامه نویسی
  • میتوانید ایده های خودتون رو پیاده سازی نمایید
  • با یادگیری برنامه نویسی اندروید مشغول به کسب میلیونی شوید
  • آیا میدونستید موسس اسنپ از همینجا شروع کرده؟

این دوره توصیه میشود به :

  • اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با اندروید هستند.
  • اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط اندروید دارند.
  • اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید دارند.
  • اشخاصی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده اندروید فعالیت كنند.
  • شركتها و سازمانهایی كه قصد راه اندازی اپلیکیشن موبایل اندروید اختصاصی خود را دارند.
  • دانشجویان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید دارند.
  • اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید دارند.
  • اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل اندروید تبدیل كنند.
coursesAndroid

اهداف کلی دوره

  • آموزش سیستم عامل اندروید
  • آشنایی با UIاندروید، براساس  XML
  • آشنایی کامل با ساختار اندروید و پیاده سازی انواع اپلیکیشن
  • پیاده سازی استاندارد های متریال دیزاین در اندروید
  • پیاده سازی دیتابیس   SQLite و ORM Realm
  • پیاده سازی الگوهای استاندارد MVP Pattern و MVVM
  • پیاده سازی سرویس های گوگل FireBase و  Google Map
  • پیاده سازی Dependency Inject  با کتابخانه Dagger 2
  • پیاده سازی ارتباط غیر همزمانی  با سرویس Restfull و کتابخانه  Retrofit
  • پیاده سازی ارتباط همزمانی  با سرویس Websocket
  • توانایی ورود به بازار کار طراحی اپلیکیشن اندروید

نمونه پروژه های تمرینی این دوره

android first practice
android second practice
android third practice

ابزارها و تکنولوژی های مورد استفاده در این دوره

firebase

پیاده سازی سرویس های گوگل با کتابخانه FireBase

پلتفرم Firebase گوگل در حال حاضر یکی از بزرگترین سرویس دهنده های ابری حوزه اپلیکیشن و وب در دنیاست. در حال حاضر بیش از 1میلیون و پانصد هزار اپلیکیشن از این سرویس استفاده می کنند. در این دوره با کنسول فایربیس اشنا میشویم و با سرویس های انالیتیکس, Crashytics و تبلیغ موبایلی Admob و همچنین ورود گوگل Google Auth آشنا میشویم

multilang

پیاده سازی اپلیکیشن های چند زبانه

اگر جزو برنامه نویس هایی هستید که قصد دارید اپلیکیشن های با وسعت جهانی ایجاد کنید با شرکت در این دوره میتوانید اپلیکیشن های ایجاد کنید تا بتوانید با تموم زبان های دنیا را پشتیبانی کند.

retrofit

اتصال به سرور با استفاده از Retrofit

کتابخانه Retrofit توسط تیم Square توسعه داده شده است و جزو محبوب ترین و پرکاربردترین کتابخانه های مورد استفاده بین توسعه دهنده های اندروید میباشد و به شک میتوان گفت اپی نیست که Retrofit در آن استفاده نشده باشد

picasso

لود کردن (کش کردن) تصاویر از سرور با کتابخانه های Picasso و Glide

اگر قصد دارید در اپلیکیشن تصاویر از سمت سرور بارگزاری شود حتی تصاویر gif میتوانید با استفاده از این Picasoo و Glide اینکار را انجام دهید و تصاویر را با سرعت و کش فوق العاده بدون نیاز به دانلود کامل انجام دهید.

mvvm

معماری نرم افزاری MVP و MVVM

آیا فقط به نوشتن برنامه توجه دارین یا داشتن یک معماری با اصول هم مدنظر تون هستش. در این دوره با دور معماری آشنا میشویم تا بدونیم طرز نوشتن کدهای با کیفیت بالا به چه صورتی هستش

dagger

کتابخانه Dagger

آیا تابحال واژه ای به نام Dependency inject را شنیده اید و میدونید چه کاربری در برنامه نویسی داره.مثلا دیگه خسته شدین همش از کلاسا new کنید. پس با همدیگه یاد میگیریم چیکار کنیم کد کم و با کیفیت بزنیم

websocket

پیاده سازی ارتباط همزمانی با سرویس Websocket

ارتباط همزمانی نمونه بازرش سیستم چت هستش که همه روزه خودمون در اپ ها میبنییم سیستم های چت را. در این دوره پیاده سازی وب سوکت رو یاد میگیریم تا یادبگیریم به چه صورتی میشود یک اپلیکیشن Realtime ساخت

سرفصل های دوره به صورت کاملاً عملی

دانلود سرفصل های آموزشی دوره

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

 

منتشر شده در اندروید

دوره برنامه نویسی Android security essential یکی از جذاب ترین دوره های آموزشی میباشد که مخاطبان دوره میتوانند در این دوره اصول پیاده سازی امنیت در پروژه های اندرویدی خود را رعایت کنند تا بتوانند اپلیکیشن ایمن را پیاده سازی کنند.در این دوره با جدیدترین مدت های پیاده سازی اپلیکیشن های اندروید و جلوگیزی از مهندسی معکوس اپ ها آشنا خواهید شد تا بتوانیم از دستیبابی هکرها به منابع برنامه و تغییر در آنها جلوگیری کرد.

اهداف کلی دوره

  • آشنایی با معماری سیستم عامل اندروید
  • آشنایی با فایل های APK
  • مهندسي معکوس در اندروید
  • امنيت دیتاهاي ذخيره سازي در sdcard
  • ایجاد sign براي اپليکيشن
  • مجوز ها در اندروید
  • تست وجود ویروس در اپليکيشن هاي اندروید
coursesAndroid

سرفصل های دوره آموزشی Android security essential به صورت کاملا عملی:

این دوره توصیه میشود به :

  • اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با موبایل هستند.
  • اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا دارند.
  • اشخاصی كه قصد فراگیری كامل طراحی سیستم امنیتی اپ های اندروید را دارند.
  • سازمان هایی که نیاز به پیاده سازی اپلیکیشن های با درصد امنیت بالا میباشند.
  • شرکت ها یا سازمان هایی که مدیریت و حفظ اطلاعات برنامه اهمیت بالایی دارد.
  • و...

دانشجویان سابق آموزشگاه اندروید ایران کجا استخدام شده اند؟

منتشر شده در اندروید

در این درس می آموزید که: یک ویرایشگر لایوت باز کنید یک Text Box اضافه کنید یک Button اضافه کنید ریشه یک UI را تغییر دهید یک Text Box با اندازه قابل تغییر بسازید

در این درس شما می خواهید با استفاده از ویرایشگر لایوت، یک لایوت که شامل یک Text Box و یک Button است ایجاد کنید. در درس بعدی شما، می¬خواهید یک برنامه که به لمس دکمه پاسخ دهد (بوسیله ارسال محتوای تکست باکس به دیگر اکتیویتی ها) بسازید.

تصویر نهایی طرح (لایوت)

UI  (رابط کاربری) یک برنامه اندرویدی از یک سلسله مراتب از لایوت ها ساخته شده است (اشیاء ViewGroup) و ویجت¬ها (اشیاء View). لایوت¬ها قالبهای نامرئی هستند که چگونگی قرارگیری Viewهای فرزند روی صفحه را کنترل می¬کنند. ویجت ها اجزای رابط کاربری هستند، به عنوان مثال دکمه و جعبه های متن.

شکل 2- در تصویر مشاهده می¬کنید که چگونه Layout  دارای اشیاء View است که از ViewGroup انشعاب پیدا کرده است.
اندروید یک واژه xml را برای ViewGroup و کلاس¬های View فراهم می¬کند، بنابراین بیشتر UI  (رابط کاربری) شما از فایلهای xml تعریف شده است.
با این حال، در این آموزش شما می¬بینید بجای نوشتن کدهای xml، چطور یک لایوت را با استفاده از ویرایشگر لایوت در اندروید استودیو، تنها با کشیدن و رها کردن اشیاء می¬سازیم.
باز کردن لایوت ادیتور
توجه: انتظار ما اینست که شما در حال استفاده از اندروید استودیو 2.3 یا بالاتر هستید و ادامه درس قبلی را دنبال می¬کنید.
برای شروع، workspace خود را به صورت زیر تنظیم می¬کنیم:
1- در پنجره project اندروید استودیو، مسیر app > res > layout > activity_main.xml را باز می¬کنیم.

2- برای فضای بیشتر در ویرایشگر لایوت، پنجره Project را از مسیر زیر پنهان کنید.
View > Tool Windows > Project
(یا روی  Project   که در سمت چپ اندروید استودیو قرار دارد، کلیک کنید.)
3- اگر ویرایشگر شما سورس xml را نشان داد، روی تب design از پایین پنجره کلیک کنید.
4- روی Show Blueprint    کلیک کنید تا فقط لایوت blueprint ظاهر شود.

 

5- مطمئن شوید که Constrainst روشن (ON) باشد. اگر ماوس را روی آن نگه دارید Hide Constrainst   نمایش داده می¬شود. (زیرا Constrainst در حال نمایش است).
6- مطمئن شوید که Autoconnect ، خاموش (OFF) باشد. اگر ماوس را روی آن نگه دارید Turn On Autoconnect    ظاهر می¬شود (زیرا حالا Off است)
7- روی Defult Margins     در نوار ابزار کلیک کنید و 16 را انتخاب کنید. (شما می¬توانید حاشیه را برای view های بعدی تنظیم کنید)

 

8-  روی Device in Editor    در نوار ابزار کلیک کنید و Pixel XL را انتخاب کنید.
ویرایشگر شما حالا باید شبیه تصویر زیر باشد.

ویرایشگر لایوت activity_main.xml را نمایش می¬دهد.
پنجره درختی Component (سمت چپ- پایین) سلسله مراتب لایوت¬ها را نشان می¬دهد. در این مورد می-بینیم که ریشه ConstraintLayout، فقط شامل یک شی TextView است.

constraintLayout یک لایوت است که موقعیت را برای Viewهای فرزند در لایوت پدر در View اصلی روی Constrainst ها تعریف می¬کند. به این ترتیب، شما می توانید هر دو طرح بندی ساده و پیچیده را با یک View سلسله مراتبی مسطح ایجاد کنید، که از لایوت¬های تو درتو (یک لایوت داخل یک لایوت، که در شکل 2 نشان داده شده است) اجتناب می¬کند در این صورت می¬توانید زمان مورد نیاز برای رسم یک UI را افزایش دهید.

 

شکل 4- تصویر دو View که داخل یک ConstraintLayout قرار گرفته است.
برای مثال، شما می¬توانید لایوت زیر را ایجاد کنید (در شکل 4)

View A، 16dp  از سمت بالا از لایوت پدر فاصله دارد.
View A، 16dp  از سمت چپ از لایوت پدر فاصله دارد.
View B به فاصله 16dp  از سمت راست View A قرار گرفته است.
View B، به بالای View A تراز شده است.
در بخش¬های زیر شما می¬خواهید لایوتی شبیه به این بسازید.
اضافه کردن یک Text Box
1- نخست، شما نیاز دارید آنچه که در لایوت است را حذف کنید. بنابرین روی TextView در پنجره درختی Component کلیک کنید، سپس دکمه Delete را فشار دهید.
2- از Palette سمت چپ پنجره، روی Text در Pane سمت چپ کلیک کنید، و سپس Plain Text را داخل ویرایشگر طراحی بکشید و آنرا نزدیک بالای لایوت رها کنید.
این یک ویجت EditText است که ورودی متن قبول می¬کند.
3- روی Plain Text در ویرایشگر طراحی کلیک کنید. حالا می¬توانید دستگیره¬های تغییر اندازه را روی هر گوشه (مربع)، و Constrainst را در هر طرف (دایره) ببینید.

برای کنترل بهتر، شما ممکن است  ویرایشگر را تا 75% بزرگ کنید برای این کار روی دکمه مورد نظر در جعبه ابزار کلیک کنید.
4- روی دستگیره کلیک کنید و به سمت بالا بکشید تا به بالای لایوت وصل شود. آن یک Constrainst است که مشخص می¬کند view باید 16dp از بالای لایوت (زیرا شما بصورت پیش فرض حاشیه را به 16 dp تنظیم می¬کنید) فاصله داشته باشد.

 

5- به طور مثال، یک Constrainst از سمت چپ View تا سمت چپ از لایوت ایجاد کنید.
نتیجه باید شبیه تصور 5 باشد.

 

تصویر 5- در این تصویر جعبه متن به سمت بالا و چپ لایوت پدر محدود شده است.
اضافه کردن دکمه
1- از پنجره Palette، روی ویجت¬ها در pane سمت چپ کلیک کنید، و Button را داخل ویرایشگر طراحی درگ کنید و آن را سمت راست رها کنید.
2- یک Constrainst  از سمت چپ دکمه به سمت راست Text Box ایجاد کنید.

3- برای Constrainst کردن View ها در تراز بندی افقی، شما باید یک Constrainst بین خطوط اصلی متن  ایجاد کنید. بنابراین روی دکمه کلیک کنید و سپس روی Baseline Constraint ، کلیک کنید که به طور مستقیم در ویرایشگر طراحی زیر view انتخاب شده، ظاهر می¬شود. خطوط اصلی لنگر در داخل دکمه ظاهر می¬شود. روی لنگرکلیک کنید، نگه دارید و سپس آن را تا خطوط اصلی لنگر ظاهر شده در Text Box درگ کنید.
نتیجه باید شبیه تصویر 6 شود.

 

شکل 6- دکمه به سمت راست Text Box  و خطوط اصلی محدود شده است.
توجه: همچنین شما می¬توانید تراز بندی افقی با استفاده از لبه¬های بالا و پایین ایجاد کنید، اما دکمه شامل بالشتک¬هایی در اطراف تصویر خود است، بنابراین اگر شما آن را با نگاه کردن تراز کنید، این تراز بندی اشتباه است.
تغییر رشته¬های UI (رابط کاربری)
روی Show Design  در نوار ابزار کلیک کنید تا رابط کاربری نمایش داده شود. توجه کنید که متن ورودی با "Name" و برچسب دکمه با "Button" پر شده است. بنابراین حالا می¬خواهیم این رشته¬ها را تغییر دهیم.

1- پنجره Project را باز کنید و سپس مسیر زیر را باز کنید.
 app > rese > values > strings.xml
این فایل، یک منبع رشته ای است که شما باید همه رشته¬های UI (رابط کاربری) را در آن مشخص کنید. بنابراین شما می¬توانید تمام رشته های یک UI را در یک مکان واحد مدیریت کنید که باعث پیدا کردن، بروزرسانی و محلی سازی می¬شود. (با رشته کدهای سخت¬افزاری در لایوت یا کد برنامه مقایسه می¬شود)
2- روی Open editor که بالای پنجره ویرایشگر است کلیک کنید. این، مترجم ویرایشگر را باز می¬کند، که یک رابط کاربری ساده برای اضافه کردن و ویرایش رشته های پیش فرض شما فراهم می¬کند و کمک می¬کند همه رشته های ترجمه را بصورت سازماندهی شده نگه دارید.

 

 

 3- روید Add key    برای ایجاد رشته جدید از "hint text" برای Text Box کلیک کنید.
    1- برای نام کلید عبارت "edit_message" را وارد کنید.
    2- برای مقدار آن عبارت "Enter a message" را وارد کنید.
    3- روی ok کلیک کنید.
4- یک کلید دیگر با نام "button_send" با مقدار "send" اضافه کنید.
حالا شما می¬توانید این رشته را برای هر View تنظیم کنید. بنابراین با کلیک روی activity_main.xml به فایل لایوت رفته و رشته ها را به صورت زیر اضافه کنید:
1- روی Text Box در لایوت کلیک کنید و اگر پنجره Properties در سمت راست قابل مشاهده نیست می توانید از نوار سمت راست  properties    آن را ظاهر کنید.
2- قرار دادن ویژگی hint و سپس کلیک روی  pick a resource (سمت راست جعبه متن). در کادری که ظاهر می¬شود روی edit_message  از لیست دابل کلیک کنید.
3- هنوز هم ویژگی جعبه متن را مشاهده می¬کنید، این مقدار را برای ویژگی متن حذف کنید (در حال حاضر با "Name" تنظیم شده است)
4- حالا روی دکمه در لایوت کلیک کنید، ویژگی text را تعیین کنید، روی Pick a Resource  کلیک کنید و سپس button_send انتخاب کنید.

 

 ساخت جعبه متن با قابلیت تغییر اندازه
برای پاسخگویی به اندازه¬های مختلف صفحه نمایش، شما می¬توانید جعبه متن را امتداد دهید تا همه فضای افقی را پر کند. (بعد از محاسبه کردن دکمه و حاشیه)
قبل از ادامه دادن، روی Show Blueprint    در نوار ابزار ویرایشگر لایوت کلیک کنید.
1- هر دو View را انتخاب کنید (روی اولی کلیک کنید و پس از نگه داشتن shift روی دیگری کلیک کنید) و سپس روی View کلیک راست کنید و Center Horizontal را انتخاب نمایید.

 

 

 شکل8 – نتیجه کلیک روی Center Horizontally
با اینکه هدف شما مرکز نمایش نیست، ولی این یک راه سریع برای ایجاد یک زنجیره بین دو View است. یک زنجیره constraint  دو طرفه است که به شما اجازه می دهد بین دو یا بیشتر از چند View زنجیری را به صورت یکنواخت قرار دهید. با این حال، این حاشیه های افقی را حذف می¬کند، بنابراین شما می¬توانید آن را تغییر دهید.
2- دکمه را انتخاب کنید و پنجره properties را باز کنید. هر دو حاشیه چپ و راست را با 16 تنظیم کنید.
3- جعبه متن را انتخاب کنید و فقط حاشیه چپ را به 16 تنظیم کنید.
4- هنوز ویژگی¬های Text Box را مشاهده می¬کنید، روی نماد عرض کلیک کنید تا به Match Constraints تنظیم شود، همانطور که با شماره 1 در شکل 9 نشان داده شده است.

 

 شکل 9- برای تغییر عرض به Match Constraints کلیک کنید
"Match constraints"  به معنای عرض هست که حالا بوسیله Constraintsهای افقی و حاشیه ها مشخص شده است. از این رو Text Box در فضای افقی امتداد پیدا می¬کند (بعد از محاسبه برای دکمه وهمه حاشیه ها)
اکنون لایوت طراحی شده است و باید مانند شکل 10 نمایش داده شود.

 

 

 

شکل 10- Text Box در حال حاضر برای تکمیل فضا باقی مانده است

اگر لایوت شما به آن چیزی که انتظار داشتید شبیه نشد ، ببیند که چه چیزی باید XML شما را شبیه سازی کند و آن را با متن زیر مقایسه کنید. (اگر ویژگی های شما در یک سفارش متفاوت ظاهر شود، این درست است.)
کد XML


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myfirstapp.MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="@string/edit_message"
        android:inputType="textPersonName"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/button"
        android:layout_marginLeft="16dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send"
        app:layout_constraintBaseline_toBaselineOf="@+id/editText"
        app:layout_constraintLeft_toRightOf="@+id/editText"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp" />
</android.support.constraint.ConstraintLayout>

برای  اطلاعات بیشتر درباره زنجیره ها و همه چیزهای دیگر که می¬توانید با ConstraintLayout، انجام دهید لینک زیر را بخوانید.
 ایجاد یک رابط کاربری قابل پاسخگو با ConstraintLayout

اجرای برنامه
اگر برنامه شما از درس قبل روی دستگاه نصب شده است، به سادگی روی Apply Change در نوار ابزار کلیک کنید تا برنامه با لایوت جدید بروزرسانی شود یا روی Run کلیک کنید تا برنامه نصب و اجرا شود.
دکمه هنوز هیچ کاری انجام نمی¬دهد. برای شروع یک activity دیگر هنگامی که دکمه تاچ می¬شود، به درس بعدی مراجعه کنید.
منبع: https://developer.android.com/training/basics/firstapp/building-ui.html

 

منتشر شده در بلاگ

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

زمانیکه با اجرای یک اکتیویتی، اکتیویتی دیگری متوقف میشود، این تغییر از طریق روش های پاسخگویی در چرخه حیات اکتیویتی (activity’s lifecycle callback methods) ، شناخته میشود. چندین روش پاسخگویی برای هر اکتیویتی که ناشی از تغییر در وضعیت آن است، وجود دارد. روشهایی مانند سیستم در حال ساخت اکتیویتی است (creating activity)، در حال متوقف کردن آن است ( stopping activity)، درحال ازسرگیری پردازش است (resuming activity) یا درحال ازبین بردن آن است (destroying activity). بنابراین، هر روش پاسخگویی فرصتی را دراختیارتان میگذارد تا بسته به وضعیت حال حاضر سیستم، عمل خاصی که مد نظرتان است را انجام دهید. بعنوان نمونه، زمانیکه برنامه متوف است، اکتیویتی میبایست آبجکت ها و داده های حجیم مانند ارتباطات شبکه و دیتابیس را آزاد کند. زمانیکه فعالیت اکتویتی مجدداً از سر گرفته میشود، میتوانید دوباره منابع مورد نیازتان را بدست اورید و به ادامه کاری که قبلاً میکردید بپردازید. تمام این انتقال ها بین وضعیت های مختلف اکتیویتی بخشی از چرخه حیات اکتیویتی است.

به عنوان مثال،

1 - با دریافت یک تماس تلفنی یا سوئیچ به یک برنامه - برنامه شما خطا می دهد.

2 – باعث بالا رفتن مصرف منابع مهم می شود.

3 - از دست دادن کاربر.

4 – پرش از برنامه وقتی کاربر صفحه را به صورت عمودی می چرخاند.

این مطلب جزئیات چرخه فعالیت را توضیح می دهد که چه اتفاقی در هنگام اجرای آنها می افتد و چه چیزی باید در طول آنها اجرا شود.

مفاهیم چرخه حیاط اکتیویتی :

()onCreate – هنگامی که اکتیویتی برای اولین بار ایجاد می شود، فراخوانی می شود.

()onStart – هنگامی که اکتیویتی به کاربر نمایش داده می شود فراخوانی می گردد.

()onResume – هنگامی که اکتیویتی شروع به تعامل با کاربر می کند، فراخوانی می شود.

()onPause – هنگامی که اکتیویتی کنونی موقتا نگه داشته می شود و اکتیویتی قبلی در حال شروع به کار شدن است، فراخوانی می شود.

()onStop – هنگامی که دیگر اکتیویتی به کاربر نمایش داده نمی شود، فراخوانی می شود.

()onDestroy – قبل از اینکه اکتیویتی کاملا از بین برود، توسط سیستم فراخوانی می شود.

()onRestart – هنگامی که اکتیویتی پس از توقف دوباره شروع به کار می کند، فراخوانی می شود.

خوب همون طور که در تصویر بالا دید زمان های مختلفی از یک اکتیویتی نشان داده شده که خانه اندروید مهمترین بخش ها رو خدمت شما معرفی می کنه وقتی کاربر وارد یک اکتیویتی می شود برای اولین بار برنامه اندرویدی ما وارد متد onCreate میشه و کدهای موجود در اون رو Run می کنه خوب حالا اگه کاربر برروی یک دکمه کلیک کنه و وارد یه اکتیویتی جدید بشه اکتیویتی قبلی وارد onPause میشه و اگه کاربر مدت زمان زیادی رو وارد اکتیویتی قبلیه نشه اکتیویتی وارد onStop و بعد مدتی هم وارد onDestroy میشه .

خوب حالا اگه اکتیویتی داخل onPause باشه و کاربر به اکتیویتی برگرده کدهای موجود در onResume اجرا میشه ولی اگه اکتیویتی بسته شده باشه کدهای داخل onCreate از نو شروع میشه .

Lifecycle callbacks:

1 – () onCreate :

()onSaveInstanceState متدی است که شما می توانید با آن وضعیت فعلی اکتیویتی تان را ذخیره کنید. سیستم این متد را قبل از اینکه اکتیویتی نابود شود و به شیئ Bundle فرستاده شود، فرا میخواند. Bundle جایی است که شما می توانید اطلاعات مربوط به وضعیت اکتیویتی تان را مانند نام ها با استفاده از متد ()putString، ذخیره کنید. حال اگر سیستم اکتیویتی شما را نابود کند و کاربر به اکتیویتی برگردد، سیستم Bundle را به ()onCreate ارسال میکند و بنابراین با این روششما می توانید وضعیت قبلی اکتیویتی تان را که با استفاده از متد ()onSaveInstanceState ذخیره کرده بودید، بازیابی کنید. اگر اطلاعاتی برای بازیابی موجود نباشد، مقدار Bundleی که به ()onCreate ارسال شده است، تهی (null) خواهد بود.

TextView mTextView;

// some transient state for the activity instance
String mGameState;

@Override
public void onCreate(Bundle savedInstanceState) {
    // call the super class onCreate to complete the creation of activity like
    // the view hierarchy
    super.onCreate(savedInstanceState);

    // recovering the instance state
    if (savedInstanceState != null) {
        mGameState = savedInstanceState.getString(GAME_STATE_KEY);
    }

    // set the user interface layout for this Activity
    // the layout file is defined in the project res/layout/main_activity.xml file
    setContentView(R.layout.main_activity);

    // initialize member TextView so we can manipulate it later
    mTextView = (TextView) findViewById(R.id.text_view);
}

// This callback is called only when there is a saved instance previously saved using
// onSaveInstanceState(). We restore some state in onCreate() while we can optionally restore
// other state here, possibly usable after onStart() has completed.
// The savedInstanceState Bundle is same as the one used in onCreate().
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    mTextView.setText(savedInstanceState.getString(TEXT_VIEW_KEY));
}

// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString(GAME_STATE_KEY, mGameState);
    outState.putString(TEXT_VIEW_KEY, mTextView.getText());

    // call superclass to save any view hierarchy
    super.onSaveInstanceState(outState);
}

2 – () onStart :

درست قبل از اینکه اکتیویتی برای کاربر قابل مشاهده باشد، فراخوانی می شود. اگر اکتیویتی به جلو یا پشت دیگر اکتیویتی ها برود، باید متدهای ()onResume و ()onStop بعد از آن اجرا شود.

3 – () onResume :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد با کاربر تعاملش را آغاز کند، فراخوانی میشود. در این زمان، اکتیویتی در بالاترین نقطه انباره (Stack) قرار دارد و میتواند با کاربر در تعامل باشد. همیشه بعد از آن متد ()onPause باید اجرا شود.

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first


    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

4 – () onPause :

این متد زمانی فراخوانی میشود که اکتیویتی دیگری میخواهد اجرا شود (Resume). بطور معمول از این متد برای انجام کارهایی مانند ذخیره اطلاعاتی که هنوز ذخیره نشده اند، توقف انیمیشن و یا سایر کارهایی که CPU را بخودش درگیر کرده است، استفاده میشود. هر کاری که قرار است انجام شود باید بسیار سریع انجام شود زیرا تا زمانیکه وظیفه این متد انجام نشود، اکتیویتی بعدی اجرا نمیشود. متد بعد از این ()onResume است اگر اکتیویتی مجدداً بخواهد به نمایش درآید و یا ()onStop است اگر بخواهد از دید و دسترس کاربر پنهان شود.

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first


    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release();
        mCamera = null;
    }
}

5 – () onStop :

زمانی اجرا میشود که اکتیویتی دیگر در دسترس کاربر نیست. این متد ممکن است بدلیل اینکه دارد نابود میشود، یا بدلیل اینکه اکتیویتی دیگری (چه اکتیویتی ای که قبلاً اجرا شده و الان در استک است و چه اکتیویتی جدید باشد) کارش را از سر گرفته است و دستور اینکار را داده باشد ، اجرا شود. متد بعد از آن ()onRestart است اگر اکتیویتی میخواهد برگردد تا در دسترس کاربر قرار گیرد و یا ()onDestroy است اگر اکتیویتی بخواهد نابود شود.

@Override
protected void onStop() {
    // call the superclass method first
    super.onStop();

    // save the note's current draft, because the activity is stopping
    // and we want to be sure the current note progress isn't lost.
    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());

    // do this update in background on an AsyncQueryHandler or equivalent
    mAsyncQueryHandler.startUpdate (
            mToken,  // int token to correlate calls
            null,    // cookie, not used here
            mUri,    // The URI for the note to update.
            values,  // The map of column names and new values to apply to them.
            null,    // No SELECT criteria are used.
            null     // No WHERE columns are used.
    );
}

6 – () onDestroy :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد نابود شود، اجرا میشود. بعبارت دیگر این متد آخرین فراخوانی است که اکتیویتی دریافت خواهد کرد. این فراخوانی ممکن است به این دلیل باشد که اکتیویتی به پایان انجام وظیفه اش رسیده است (کسی متد ()finish را اجرا کرده است)، یا سیستم بمنظور در اختیار گرفتن فضای بیشتر نیاز دارد تا بعضی از اکتیویتی را نابود کند. متد ()isFinishing وجه تمایز دو سناریوی فوق است.

وضعیت Activity و خروج از حافظه  :

Likelihood of being killed Process state Activity state
Least Foreground (having or about to get focus) Created
Started
Resumed
More Background (lost focus) Paused
Most Background (not visible) Stopped
Most Empty Destroyed

-          جدول رابطه بین چرخه حیات پردازش و وضعیت اکتیویتی

حرکت بین فعالیت ها:

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

شروع یک Activity

بسته به اینکه آیا Activity شما می خواهد نتیجه را از یک Activity جدید شروع کند و یا ممکن است Activity جدید را با استفاده از روش ()startActivity یا () startActivityForResult شروع کنید. در هر صورت، شما یک شی (Intent) Object را منتقل میکنید.

Intent در لغت به معنای انجام کار است. در اندروید هم تا حدود زیادی همین معنی را می رساند. به اینصورت که به واسطه intent به سیستم عامل اندروید اعلام می کنیم قصد انجام چه کاری را داریم و سیستم عامل چه کاری باید برای ما انجام دهد. به طور کلی اینتنت واسطی است مابین کامپوننت های مختلف (شامل Activity ها، Service ها، Broadcast Receiver ها) درون یک اپلیکیشن و یا مابین چند اپلیکیشن. کاربرد های متعددی برای اینتنت وجود دارد که شاید ساده ترین آن را بتوان انتقال بین دو Activity درون یک اپلیکیشن دانست. در Intent شما می توانید فعالیت و نوع آنرا مشخص کنید. یک Intent همچنین می تواند مقادیر کوچکی از داده ها را که توسط Activity هایی که آغاز شده است، حمل کند.

() startActivity :

وقتی که با اپلیکیشن کار می کنید شما اغلب نیاز دارید که به از یک اکتیویتی به اکیتیویتی دیگر بروید یا (launch) کنید.برای مثال کد زیر نشان می دهد که چگونه می توان با استفاده از intent یک اکتیویتی را صدا زد :

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

برنامه شما ممکن است بخواهد که یک (action) یا یک فعالیت را مانند ارسال ایمیل ی ارسال یک پیام (message) در این صورت میتوان intent را به صورت زیر تغییر داد :

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

در بالا از EXTRA_EMAIL استفاده شده است یک آرایه رشته ای از آدرس های ایمیل می باشد که باید بصورت ایمیل فرستاده شود.

() startActivityForResult :

لزومی وجود ندارد که شروع activity های دیگر یکطرفه باشد. همچنین می توانید activity دیگری را شروع و نتیجه ای را دریافت کنید. برای دریافت نتیجه به جای startActivity() می توانید از () startActivityForResult, را فراخوانی کنید.

به عنوان مثال، برنامه شما می تواند یک برنامه دوربین را شروع و عکس گرفته شده را به عنوان یک نتیجه برگرداند. یا شما ممکن است برنامه دیگران را برای کاربری برای انتخاب مخاطب شروع کنید و جزئیات مخاطب را به عنوان نتیجه دریافت خواهید کرد.

البته activity ای که پاسخ می دهد باید برای برگرداندن یک نتیجه طراحی شود. هنگامی که این را انجام می دهد، این نتیجه به عنوان یک شی مقصد دیگر ارسال می شود. activity شما آن را در پاسخ onActivityResult() دریافت می کند.

هنگامی که activity کاربر با activity های پس از آن و مقدار بازگشتی به اتمام می رسد، سیستم تابع onActivityResult() activity شما را فراخوانی می کند. این تابع شامل سه آرگومان است:

1          کد درخواستی که شما به () startActivityForResult فرستاده اید .

2          کد نتیجه توسط activity دوم مشخص شده است.اگر عملیات موفقیت آمیز باشد این RESULT_OK و RESULT_CANCELED اگر کاربر خارج شود یا عملیات ناموفق باشد.

3          مقصودی که حامل داده های نتیجه می باشد.

public class MyActivity extends Activity {
     ...

     static final int PICK_CONTACT_REQUEST = 0;

     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
             // When the user center presses, let them pick a contact.
             startActivityForResult(
                 new Intent(Intent.ACTION_PICK,
                 new Uri("content://contacts")),
                 PICK_CONTACT_REQUEST);
            return true;
         }
         return false;
     }

     protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == PICK_CONTACT_REQUEST) {
             if (resultCode == RESULT_OK) {
                 // A contact was picked.  Here we will just display it
                 // to the user.
                 startActivity(new Intent(Intent.ACTION_VIEW, data));
             }
         }
     }
}

وقتی یک activity توسط activity دیگر شروع می شود، هر دوی آنها داری چرخه حیات مربوط به خود هستند. اولین activity متوقف می شود و در حالت متوقف یا متوقف میگیرد و activity دیگری ایجاد می شود.

منظور از callback lifecycle مواقعی است که وقتی دو اکتیویتی در فعالیت یکسان هستند.یعنس وقتی که اکتیویتی A اکتیویتی B را صدا میزند:

1-      متد () OnPause اجرا می شود برای اکتیویتی A.

2-      متد onCreate(), onStart(), and onResume() در اکتیویتی B در حال اجرا هستند

3-      اگر اکتیویتی A به مدت طولانی نمایش داده نشود متد onStop() اجرا می شود.

ذخیره و بازگرداندن حالت اکتیویتی

چند سناریو وجود دارد که در آن اکتیویتی شما به دلیل رفتار برنامه از بین می رود، مانند زمانی که کاربر بر روی دکمه Back کلیک کند یا فعالیت خود را با فراخوانی متد () finish تمام میکند. ممکن است وقتی از یک اکتیویتی خارج می شوید اطلاعات مربوز به آن اکتیویتی از بین برود مانند مقادیر ذخیره در متغیر ها یا اگر اکتیویتی در حالت متوقف باشد و در مدت زمان طولانی مورد استفاده قرار نگرفته باشد یا اکتیویتی پیشین به منابع بیشتری نیاز داشته باشد.

وقتی که یک activity متوقف شده است حالت activity باقی می ماند این فرضیه درست است چرا که شی activity هنوزدر حافظه نگهداری شده است وقتی متوفق می شود تمام اطلاعات وضعیت فعلی هنوز از بین نرفته است بنابراین متغیری که کاربر با استفاده از activity اعمال کرده است قابل بازیابی می باشد بنابرای وقتی activity دوباره ادامه پیدا کند این تغییرات هنوز آنجا هستند بنابراین وقتی که سیستم یک activity به منظور پوشش حافظه از بین ببرد شی activity از بین رفته بنابراین سیستم به راحتی نمی تواند حالت قبلی ذخیره شده را ادامه دهد .

() onSaveInstanceState متدی است که شما می توانید با آن وضعیت فعلی اکتیویتی تان را ذخیره کنید. سیستم این متد را قبل از اینکه اکتیویتی نابود شود و به شیئ Bundle فرستاده شود، فرا میخواند. Bundle جایی است که شما می توانید اطلاعات مربوط به وضعیت اکتیویتی تان را مانند نام ها با استفاده از متد () putString، ذخیره کنید. حال اگر سیستم اکتیویتی شما را نابود کند و کاربر به اکتیویتی برگردد، سیستم Bundle را به () onCreate ارسال میکند و بنابراین با این روششما می توانید وضعیت قبلی اکتیویتی تان را که با استفاده از متد () onSaveInstanceState ذخیره کرده بودید، بازیابی کنید. اگر اطلاعاتی برای بازیابی موجود نباشد، مقدار Bundleی که به () onCreate ارسال شده است، تهی (null) خواهد بود.

برای ذخیره اطلاعات مربوط به اکتیویتی خود، شما باید بر روی () SaveInstanceState باید به صورت زیر عمل کنید:

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);


    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

بازگرداندن حالت اکتیویتی:

وقتی اکتیویتی شما بعد نابود شدن دوباره ساخته و کار خود را شروع می کندشما می توانید تنظیماتی که دخیره کرده اید را بازیابی کنید با استفاده از متد onCreate() و onRestoreInstanceState()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first


    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

شما ممکن است به جای ()onCreate از متد ()onRestoreInstanceState استفاده کنید.متد ()onRestoreInstanceState فقط تنظیمات ذخیره شده را باز می گرداند.

public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);


    // Restore state members from saved instance
    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}

منتشر شده در بلاگ
دوشنبه, 27 ارديبهشت 809 05:05

اکتیویتی ها در اندروید

یک کلاس اکتیویتی یک جز حیاتی از برنامه اندروید است، و اکتیویتی های راه اندازی شده با هم یک بخش اصلی از مدل نرم افزار پلت فرم هستند.بر خلاف مثال های برنامه نویسی که در آن، برنامه ها با متد main() راه اندازی می شوند، سیستماندرویدبا استفاده از متد های خاص پاسخ فراخوانی که به مراحل خاص چرخه زندگی خود مربوط می شود، کد را در یک اکتیویتی آغاز می کند

این مقاله مفهوم اکتیویتی ها را معرفی می کند و سپس راهنمایی هایی در مورد نحوه کار با آنها می دهد.

مفهوم اکتیویتی ها

کلاس اکتیویتی به عنوان نقطه ورود برای تعامل برنامه با کاربر عمل می کند، و پنجره ای را برای ترسیم UI فراهم می کند. این پنجره به طور معمول صفحه را پر می کند، اما ممکن است از صفحه نمایش کوچکتر، یا در بالای پنجره های دیگر شناور باشد. شما یک اکتیویتی را به عنوان یک زیر کلاس از کلاس اکتیویتی اجرا می کنید. بطور کلی، یک اکتیویتی یک صفحه را در برنامه اجرا می کند به عنوان مثال، یکی از اکتیویتی های برنامه ممکن است روی صفحه Preferences پیاده سازی شود، در صورتیکه اکتیویتی دیگر روی صفحه نمایش پست الکترونیک (Compose Email) پیاده سازی می شود.

اکثر برنامه های دارای چندین صفحه نمایش هستند، به این معنی که اکتیویتی های متعدد را شامل می شوند. به طور معمول، یک اکتیویتی در یک برنامه به عنوان اکتیویتی اصلی (main activity) مشخص می شود، که اولین صفحه ای­ست که هنگام اجرای برنامه کاربر نمایش داده می شود.سپس هر اکتیویتی می تواند اکتیویتی دیگر را برای انجام عملیات مختلف اجرا کند. برای مثال، اکتیویتی اصلی در یک برنامه ایمیل ساده ممکن است صفحه ای را نشان دهد که صندوق ورودی ایمیل را نشان می دهد. در نتیجه، اکتیویتی اصلی ممکن است اکتیویتی های دیگری را ایجاد کند که صفحه هایی را برای کارهایی مانند نوشتن ایمیل و باز کردن ایمیل های فردی آماده کند.

هرچند اکتیویتی ها با هم کار می کنند تا یک تجربه کاربری در یک برنامه ایجاد کند، هر اکتیویتی فقط به اکتیویتی های دیگر محدود می شود؛ معمولاً وابستگی های جزئی بین اکتیویتی ها در یک برنامه وجود دارددر واقع، اکتیویتی ها اغلب اکتیویتی هایی را که متعلق به برنامه های دیگر هستند را آغاز می کنندبه عنوان مثال، یک برنامه مرورگر ممکن است اکتیویتی Share یک برنامه رسانه اجتماعی را راه اندازی کند.

 

برای استفاده از اکتیویتی ها در برنامه خود، باید اطلاعات مربوط به آنها را در مانیفست (manifest) برنامه ثبت کنید، و باید چرخه های اکتیویتی برنامه را مدیریت کنید. در نتیجهاین سند این موضوعات را معرفی می کند.

پیکربندی مانیفست(manidest)

برای اینکه برنامه شما بتواند از اکتیویتی ها استفاده کند، باید اکتیویتی ها و برخی از ویژگیهای آنها را در مانیفست (manifest) اعلام کنید.


شناساندن اکتیویتی ها

برای اعلام اکتیویتی خود، فایل manifest خود را باز کنید و عنصر <action> را به عنوان یک فرزند از عنصر <application> اضافه کنید.برای مثال:

تنها ویژگی مورد نیاز برای این عنصر android:name است، که نام کلاس آن اکتیویتی را مشخص می کندشما همچنین می توانید ویژگی های اکتیویتی را اضافه کنید مانند برچسب، نماد، یا تم UI.


توجه: پس از انتشار برنامه خود، نباید نام اکتیویتی را تغییر دهیداگر این کار را انجام دهید، ممکن است برخی از قابلیت ها مانند کلید های میانبر برنامه را نقض کنید.

معرفی فیلترهای intent

intent filters (فیلترهای هدفمند) یک ویژگی بسیار قدرتمند از پلت فرم آندروید هستندآنها توانایی راه اندازی یک اکتیویتی را نه تنها بر اساس یک درخواست صریح، بلکه بصورت ضمنی نیز فراهم می کنندبه عنوان مثال، یک درخواست صریح ممکن است به سیستم "شروع اکتیویتی ارسال ایمیل در برنامه Gmail" را بدهد. در مقابل، یک درخواست ضمنی به سیستم می گوید:"شروع به ارسال یک ایمیل در هر اکتیویتی که می تواند این کار را انجام دهد، می کند"هنگامی که سیستم UI از کاربر می خواهد در برنامه ای که استفاده می­کند، از یک فیلتر intent استفاده کند.


شما می توانید از این ویژگی با تعریف یک <intent-filter> در عنصر <activity> استفاده کنید.تعریف این عنصر شامل یک <action> و عنصر <category> به صورت اختیاری، و / یا عنصر <data> استاین عناصر برای مشخص کردن نوع intent که اکتیویتی شما می تواند پاسخ دهد، ترکیب می شوندبه عنوان مثال، قطعه کد زیر چگونگی پیکربندی یک اکتیویتی که داده های متنی را ارسال می کند و درخواست هایی از اکتیویتی های دیگر را برای انجام این کار دریافت می کند را نشان می­دهد:

در این مثال، عنصر <action> مشخص می کند که این اکتیویتی داده ها را ارسال می کنداعلان عنصر <category> به عنوان DEFAULT (پیش فرض) این اکتیویتی را قادر می سازد تا درخواست ها را دریافت کندعنصر <data> نوع داده هایی را که این اکتیویتی می تواند ارسال کند مشخص می کندقطعه کد زیر چگونگی کار با اکتیویتی های شرح داده شده در بالا را نشان می­دهد:

اگر می خواهید برنامه شما محتوا داشته باشد و به دیگر برنامه ها اجازه دسترسی به اکتیویتی های خود را ندهید شما به هیچ فیلتر initent دیگری نیاز ندارید. اکتیویتی هایی که نمی خواهید توسط برنامه های دیگر در دسترس قرار گیرند، نباید فاکتورهای intent داشته باشند، و شما میتوانید خودتان با استفاده از مفاهیم صریح آن را شروع کنید.

تعریف مجوز(permissions)

شما می توانید از برچسب <activity> در مانیفست برای کنترل برنامه هایی که می توانید یک اکتیویتی خاص را شروع کنید استفاده کنید. اکتیویتی پدر نمی تواند اکتیویتی فرزند را راه اندازی کند، مگر اینکه هر دو اکتیویتی مجوز مشابه در manifest داشته باشند. اگر یک عنصر <uses-permission> را برای یک اکتیویتی خاص اعلام کنید، اکتیویتی صدا زده باید با <use-permission> تطابق داشته باشد.

به عنوان مثال، اگر برنامه شما می خواهد از یک برنامه فرضی به نام SocialApp برای اشتراک گذاری در رسانه های اجتماعی استفاده کند، خود SocialApp باید مجوزی را که برنامه ای را فراخوانی کند داشته باشد. باید تعریف کنید:

سپس اجازه می­دهد که SocialApp را صدا بزنید، برنامه شما باید با مجوز SocialApp در manifest مطابقت کند:

در دوره حیات، اکتیویتی در تعدادی از حالت ها انجام می شود.شما از یک سری ازفراخوانیها برای مدیریت انتقال بین حالت­ ها استفاده می کنیدبخش های زیر این فراخوانی ها را معرفی می کنند.

onCreate ()

شما باید این فراخوانیرا اجرا کنید، که هنگام فعال شدن یک اکتیویتی ایجاد می شوداجرای شما باید اجزای ضروری اکتیویتی خود را راه اندازی کند: به عنوان مثال، برنامه شما باید view ها را ایجاد کند و داده ها را به لیست ها متصل کندمهمتر از همه، این جایی است که شما باید setContentView () را برای تعریف لایوت برای رابط کاربری فعال کنید.
هنگامی که onCreate () پایان می یابد، فراخوانی بعدی همیشه onStart () آغاز می شود.

on start ()

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

OnResume()

سیستم فراخوان این تماس را درست قبل از شروع اکتیویتی با کاربر برقرار می کنددر این مرحله، اکتیویتی در بالای پشته اکتیویتی است و تمام ورودی های کاربر را ضبط می کنداکثر قابلیت های اصلی برنامه در روش onResume () اجرا می شود.

فراخوان onPause () همیشه در onResume () دنبال می شود.

onPause ()

سیستم هنگامی که اکتیویتی تمرکز را از دست می دهد و در حالت onPause() متوقف می شوداین حالت زمانی اتفاق می افتد که، برای مثال، کاربر دکمه Back یا Overlay را لمس می کندهنگامی که سیستم بر پایه onPause() برای اکتیویتی خود فراخوانی می شود، به طور فنی به این معنی است که اکتیویتی شما هنوز هم آرام و پیدا است اما اغلب نشان می دهد که کاربر می­ خواهد اکتیویتی را ترک کند و اکتیویتی به زودی به وضعیت متوقف (stop) یا ادامه یافتن (Resume) وارد می شود.

یک اکتیویتی در حالت متوقف شده ممکن است همچنان بروز رسانی را ادامه دهد اگر UI کاربر منتظر بروز رسانی UI باشدنمونه هایی از چنین اکتیویتی هایی شامل نمایش یک صفحه نقشه ناوبری یا بازی پخش رسانه ای می باشدحتی اگر چنین اکتیویتی هایی تمرکز را از دست بدهند، کاربر انتظار دارد UI به بروز رسانی خود ادامه دهد.

شما نباید درonPause() برای ذخیره کاربرد یا داده های کاربر، برقراری تماس های شبکه یا انجام معاملات پایگاه داده استفاده کنید.

هنگامی که onPause () اجرا می شود، فراخوان بعدی یا onStop () یا onResume () بسته به آنچه اتفاق می افتد اجرا می ­شود پس از آن اکتیویتی وارد حالت توقف (pause) شده است.

onStop ()

هنگامی که اکتیویتی دیگر برای کاربر قابل مشاهده نیست، onStop() صدا شده است.این ممکن است زمانی اتفاق بیفتد که اکتیویتی تخریب شده و یک اکتیویتی جدید شروع شده است، یا یک اکتیویتی فعلی در حال وارد شدن به حالت Resume است و اکتیویتی Stop را پوشش می دهددر تمام این موارد اکتیویتی متوقف شده دیگر قابل مشاهده نیست.
فراخوانی بعدی که سیستم صدا می­ زند، یا onRestart ()، اگر اکتیویتی دوباره با کاربر ارتباط برقرار کند، و یا onDestroy ()، اگر این اکتیویتی به طور کامل متوقف شود، می باشد.

onRestart ()

سیستم هنگام فراخوانی اکتیویتی در وضعیت متوقف شده، onRestart()را فراخوانی می کنداین حالت اکتیویتی را از زمانی که متوقف شد بازیابی می کند.
این فراخوانی همیشه توسط onStart () دنبال می شود.

onDestroy ()

سیستم این فراخوانی را قبل از اکتیویتی نابود می کند.

این آخرین فراخوانی است که اکتیویتی دریافت می کند. onDestroy ()معمولاً اجرا می شود تا اطمینان حاصل شود که تمام منابع یک اکتیویتی رها شده وقتی که اکتیویتی یا فرآیند حاوی آن تخریب شود.

این بخش فقط مقدمه ای بر این موضوع بود.

منتشر شده در بلاگ

از شبیه ساز اندروید استودیو (AVD) و شبیه سازهای ثانویه مانند Genymotion می توان جهت اجرا (Run) و همچنین خطایابی یا دیباگ (Debug) پروژه های اندرویدی استفاده کرد.مزیت شبیه سازها این بود که نیاز به تهیه سخت افزار و دیوایس جداگانه را برای توسعه دهنده مرتفع ساخته و در یک محیط شبیه سازی شده اندروید این امکان را مهیا می کرد تا پروژه خود را روی تمامی نسخه های اندروید تست و دیباگ کنیم. با این حال توسعه دهنده ممکن است بنا به دلایلی در برخی مواقع مایل به اجرا و دیباگ اپلیکیشن خود بر روی دیوایس های واقعی گوشی و یا تبلت باشد.

احتمالا اولین راهی که به ذهن اکثر ما می رسد، ساخت پکیج نصبی apk، انتقال فایل به دیوایس و سپس نصب آن می باشد. مسلما این فرایند زمان زیادی را از ما می گیرد. یعنی اگر لازم باشد ۱۰ بار تغییراتی را در پروژه ایجاد و سپس مجدد روی دیوایس واقعی اجرا یا دیباگ کنیم، این پروسه باید ۱۰ بار تکرار شود.

فعالسازی USB Debugging

گوگل راه ساده تری را پیش روی توسعه دهندگان اندروید قرار داده. به اینصورت که با اتصال دیوایس از طریق کابل USB به کامپیوتر به طور مستقیم در محیط اندروید استودیو امکان Run و Debug پروژه وجود دارد که این قابلیت USB Debugging نام دارد. برای استفاده از این قابلیت ابتدا باید آن را در قسمت تنظیمات دیوایس اندرویدی خود فعال کنیم. در قسمت Settings یا تنظیمات اندروید گزینه ای با عنوان Developer Options وجود دارد که مربوط به تنظیمات USB Debugging می شود.

 و سپس این پیغام ظاهر میگردد.

توجه داشته باشید اگر سیستم عامل دیوایس اندروید ۴٫۲ و به بالا می باشد، گزینه Developer Options به صورت پیش فرض مخفی است که برای فعال سازی و نمایش آن لازم است به قسمت About phone رفته و ۷ بار روی قسمت Build number ضربه بزنیم (Build number معمولا در قسمت Software info قرار دارد). حالا Developer Options فعال شده و با برگشت مجدد به Settings این گزینه مشاهده می شود:

نصب درایور دیوایس اندرویدی

در مرحله بعد باید درایور دیوایس را روی کامپیوتر نصب کنم. البته نصب درایور فقط در سیستم عامل ویندوز انجام می شود و در سیستم عامل های مک و لینوکس نیازی به نصب درایور نیست

اما سایر دیوایس ها مانند سامسونگ، ال جی، سونی و… درایور مجزا دارند که هر کمپانی برای دیوایس های خود یک درایور بر روی وب سایت خود منتشر می کند (عموما هر کمپانی برای تمامی دیوایس های خود یک درایور مشترک ارائه می دهد). دیوایسی که در این آموزش استفاده شده مربوط به کمپانی SAMSUNG می باشد که با جستجوی عبارت SAMSUNG Mobile Driver در گوگل، اولین نتیجه مربوط به وب سایت سامسونگ و دانلود درایور بود.

 

 قبل از نصب درایور لازم است دیوایس توسط کابل USB به کامپیوتر متصل شود. پس از شناسایی دیوایس توسط ویندوز، فایل درایور را اجرا و فرایند نصب را شروع می کنم. پس از اتمام عملیات نصب، احتمالا پنجره ای ظاهر می شود که نشان دهنده نصب درایور دیوایس روی سیستم عامل است (مشابه آنچه هنگام اولین اتصال یک USB Flash به کامپیوتر اتفاق می افتد).منتظر می‌مانم تا به اتمام برسد (ممکن است چند دقیقه زمان ببرد).

برنامه را از Android Studio به صورت زیر اجرا کنید:

1 - در Android Studio، ماژول برنامه را در پنجره Project کلیک کنید و سپس Run> Run را انتخاب کنید (یا روی Run در نوار ابزار کلیک کنید).

2 - در پنجره Select Deployment Target، دستگاه خود را انتخاب کرده و روی OK کلیک کنید.

Android Studio این برنامه را در دستگاه متصل شده شما نصب می کند و آن را اجرا می کند.

 

اجرای یک شبیه ساز:

قبل از اینکه برنامه خود را در یک شبیه ساز اجرا کنید، باید یک تعریف مجاز   Android virtual device) AVD) ایجاد کنید.

Virtual Device ، یک دستگاه مجازی (در حالت خاص، گوشی یا تبلت مجازی) می باشد که ما می توانیم پروژه های اندروید خود را در محیط کامپیوتر (بدون استفاده از هیچ دستگاه واقعی) اجرا و تست کنیم. در این مبحث، چگونگی ساخت یک Virtual Device در برنامه Android Studio را شرح می دهیم.

یک تعریف AVD را به صورت زیر ایجاد کنید:

1 - دستگاه Android Device Virtual Device را با انتخاب Tools> Android> AVD Manager یا کلیک کردن روی آیکون مدیریت AVD در نوار ابزار راه اندازی کنید.

2 - روی صفحه Virtual Devices خود روی Create Virtual Device کلیک کنید.

3 - لیستی از سخت افزارهای قابل انتخاب نمایش داده می شود. یکی را انتخاب کرده و بر روی گزینه Next کلیک می کنیم :

 

 5 - در مرحله بعدی، باید نسخه اندرویدی (نسخه api) که قصد داریم بر روی سخت افزار انتخاب شده، نصب باشد را تعیین کنیم. در اینجا، چون ما قبلا تنها نسخه api برابر 25 را داشته ایم، تنها این نسخه قابل انتخاب است. اما شما می توانید نسخه های api مختلف از اندروید را دریافت کنید تا در این مرحله، نسخه api مد نظر خود را انتخاب نمایید :

6 - بر روی دکمه Next کلیک می نماییم. لیستی از تمامی انتخاب های انجام شده و همچنین چند گزینه دیگر برای انتخاب به شما نمایش داده می شود که می توانید هر یک از آنها را تغییر بدهید و سپس بر روی finish کلیک کنید :

 

7 - روی دستگاه مجازی مجازی خود، دستگاهی که تازه ایجاد کرده اید را انتخاب کرده و روی Launch this AVD در شبیه ساز کلیک کنید.

در حالی که شبیه ساز شروع به کار می کند، پنجره Android Virtual Device Manager را ببندید و به پروژه خود بازگردید تا بتوانید برنامه را اجرا کنید:

1 - هنگامی که شبیه ساز بوت می شود، بر روی ماژول برنامه در پنجره Project کلیک کنید و سپس Run> Run را انتخاب کنید (یا روی Run در نوار ابزار کلیک کنید).

2 - در این پنجره ، شبیه ساز را انتخاب کنید و روی OK کلیک کنید.

Android Studio این برنامه را در شبیه ساز نصب می کند و آن را اجرا می کند.

بنابراین Virtual Device همانند یک گوشی (دستگاه) واقعی اجرا شده و در یک پنجره جدید نمایش داده می شود :

منتشر شده در بلاگ

از ساعت 9 تا 18 مشاوره تخصصی برای انتخاب دوره

تماس با پشتیبانان ما

021-88946636

راه های ارتباطی با ما

لینک های کاربردی