Android Course Materials

מודול 1 – ממשק משתמש – User Interface

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

PointUpPointDown

אפליקציה זו היא משחק פשוט עם שני כפתורים: אחד המעלה ניקוד והשני מוריד, התוצאה מוצגת בתיבת טקסט ומתעדכנת בזמן אמת.

OnClickListener, Button, TextView, LinearLayout

https://youtu.be

/QwBU4xZAO6E

InputExample

הדגמה של קבלת שם מהמשתמש ובעת לחיצת כפתור נאמר לו שלום אישי בתיבת טקסט נפרדת.

EditText

https://youtu.be

/Al8yHNCnYm8

LayoutsExample

כאן נלמד את נושא ה Layouts המשמשים לארגון האלמנטים במסך. לכל אחד יש לוגיקה שונה. בפרויקט זה נעבוד רק ב xml, ונלמד כיצד לחלק את המסך באופן יחסי בין הילדים, לארגן בטבלה, באופן יחסי אחד לשני או להורה או מיקום על פי המסגרת.

LinearLayout Weight, RelativeLayout, TableLayout, FrameLayout

https://youtu.be

/4I9LRc8mBDU

SemiProgramaticLayout

יצירת ה UI גם ב xml כמקודם וגם באופן דינמי בקוד ה Java. במסך ישנה תיבת טקסט וכפתור, כאשר המשתמש מכניס מספר ולוחץ על הכפתור. נוצרים במסך כפתורים חדשים לפי המספר שהוכנס. מכיוון שמספר הכפתורים ידוע בזמן ריצה לא נוכל לייצר אותם ב xml.

Toast

https://youtu.be

/hhaiSLyyVIA

AdvanceGuiExample

דוגמה מסכמת GUI כוללת הצגת תמונה ושינוי השקיפות והגודל שלה, מתג המעלים אותה (גם לפנות את המקום שלה ב layout), כפתור עם תמונה המתחלף בין מצבים, תיבת טקסט אשר מצפה לקבל סוגי קלטים שונים ומשנה את המקלדת בהתאם, אפשרות לגלילה אופקית של תמונות של חתולים וכן שילוב של הוספת רכיבים דינמיים והחלפת החתולים בכפתורים.

ImageView, Seekbar, Switch, Visibilty, ToggleButton, EditText InputType, ImageButton, State-list, HorizontalScrollView

https://youtu.be

/SiBHuCT3PBc


 

מודול 2 – הפעלת רכיבים באמצעות Intents

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

ExpilictIntentExample

פתיחת רכיב שלנו בצורה מפורשת על ידי ציון שמו ושליחת הבקשה למערכת. התרגיל כולל העברת מידע ביניהם. המשתמש מזין את שמו בתיבה לוחץ על הכפתור והשם עובר ומוצג במסך השני.

Intent, Bundle

https://youtu.be

/hDy-NcSUbgk

ImplicitIntentExample

פתיחת רכיב חדש על ידי בקשת פעולה מסוימת ושליחתה למערכת (הפעלה משתמעת), במקרה שלנו המשתמש מכניס מספר טלפון ואנו שולחים למערכת בקשת חיוג עם מספר הטלפון שהוזן. היא פותחת את החייגן.

ACTION_DIAL

https://youtu.be

/7MTHtu8o2xc

RuntimePermissions

Example

מנגנון ההרשאות החדש דורש בקשת ההרשאות בזמן ריצה בעת הצורך ולא בזמן ההתקנה. הדגמה של הנושא דרך בקשת חיוג (ביצוע החיוג בעצמנו ולא פתיחת חייגן).

ACTION_CALL

https://youtu.be

/7MTHtu8o2xc

AdvanceImplicitIntent

Example

דוגמה מתקדמת להפעלה המשתמעת (על ידי פעולה), הדגמת פעולת השליחה המיועדת להעברת מידע והדגמה על ידי בקשת מייל, לאחר מכן יצירת רכיב שלנו שיכול לענות על בקשת המייל ויקפוץ גם הוא על ידי המערכת, הדגמה של הפעולה הנפוצה ביותר להצגת מידע למשתמש (action_view) אשר בוחרת את היישום לפי סוג המידע המועבר (פתיחת המפות, אנשי הקשר, הדפדפן, החייגן, והדגמת תקשורת עם Waze, WhatsApp).

IntentFilter

ACTION_SEND

ACTION_VIEW

Uri Data

(Waze & whatsapp api)

https://youtu.be

/BojI3ShBvqk

TranslationDrill

FrenchDictionary

קישור לתרגיל

תרגיל אשר אנחנו מגדירים מתורגמן והרכיבים בו מתקשרים אחד עם השני לא באופן ישיר אלא באופן משתמע כלומר על ידי בקשת פעולה משלנו. ולכן בחלק ב מוסיפים מילון חדש כאפליקציה עצמאית והדגמת השדר משלנו שעובר בכל מערכת ההפעלה וגם הוא מוצג כאפשרות.

https://youtu.be

/rZPSN-txcdQ

ActivityForResult

Example

פתיחת רכיב לצורך קבלת תוצאה, יצירת מבחן אמריקאי וקבלת הציון ממנו, פתיחת המצלמה וקבלת התמונה, פתיחת חלון זיהוי דיבור של Google וקבלת הטקסט מתוך הקול ולאחר מכן כבונוס גם השמעתו חזרה באמצעות TTS

RecognizerIntent, TextToSpeech, RadioButton, RadioGroup,

MediaStore, Camera

https://youtu.be

/CuR1Y3woAcI

 

מודול 3 – Persistent storage

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

ActivityLifecycle

תיאור מחזור החיים של ה Activity באמצעות הדפסת הודעות חיווי בפונקציות מחזור החיים השונות הנקראות ע״י המערכת. הסבר על מעגל האקטיביות, הויזיביליות והחיים.

https://youtu.be

/oTEPVcoIMWk

SharedPrefsExample

שמירת נתונים בסיסיים (פרימיטיביים ומחרוזות באובייקט ה Shared Preferences וגישה אליו מרכיבים (Activities) שונים.

Shared Preferences

https://youtu.be

/PTq-rEWwBtA

FirstFileExample

שמירת מידע ב Internal storage. עבודה עם ה Streaming של Java לקריאת מידע וכתיבתו. חיבור ה Stream ל File מצד אחד ומצד שני ל Reader ו Writer. הוספת מידע לקובץ שכבר  קיים בזיכרון הפנימי.

FileInputStream

FileOutputStream

InputStreamReader

InputStreamWriter

BufferedReader

BufferedWriter

MODE_APPEND

https://youtu.be

/Z51am4c_WsY

SecondFileExample

שמירת תמונות ב Internal storage באמצעות פונקציות נוחות המגיעות עם ה Bitmap

Bitmap

BitmapFactory

Compression

https://youtu.be

/mD8AHo5IYNs

ThirdFileExample

שמירת כל האובייקטים ב Internal storage באמצעות מימוש Serializable

Serializable

ObjectOutputStream

ObjectInputStream

https://youtu.be

/Sv_i0eVHEEw

ForthFileExample

שמירת אובייקטים עם שדות שאינם יכולים לעבור סיריאליזציה, ביצוע החרגה של שדות אלו באמצעות transient (הדגמה על Bitmap), ושמירתם באמצעות המנגנון הייחודי של readObject  ו writeObject

transient

readObject

writeObject

https://youtu.be

/-fsWdoD3_Bg

ActivityForResult

Example

שדרוג התרגיל מהמודול הקודם על ידי שמירת התמונה המצולמת בגודלה המלא ב External storage

External storage

Environment

File

https://youtu.be

/Cw55BWs2f_o


 

מודול 4 – Menus and Dialogs

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

ActionMenuExample

יצירת תפריט ייחודי לכל Activity. תפריט פשוט עם שמירה וטעינה של מידע ב SharedPrefs

Menu

Option menu

AppCompatActivity

https://youtu.be

/vyiHvBb7boI

ContextMenuExample

יצירת תפריטים שונים אשר ניתן להצמידם לרכיבים וויזאולים. התפריטים עולים בלחיצה ארוכה על הרכיב ומופיעים לידו או בתפריט העליון.

Context Menu

Contextual action mode

Popup Menu

https://youtu.be

/LeCx6V0fQi4

AlertDialogExample

יצירת דיאלוג פשוט המופיע לפני סגירת התכנית ומבקש אישור לסגירה

AlertDialog

AlertDialog.Builder

onBackPressed

https://youtu.be

/0VGCdlASNRU

AlertDialogItemsExample

יצירת דיאלוגים המציגים רשימות. רשימה חופשית לבחירה, רשימה עם תיבות סימון ורשימה עם כפתורי רדיו.

https://youtu.be

/NCPaxHmtcEo

CustomAlertDialog

Example

יצירת דיאלוג עם עיצוב משלנו. הדיאלוג הוא מסך הרשמה לקבלת שם וססמה מהמשתמש.

LayoutInflater

https://youtu.be

/tRmG7gFOIx8

DateTimePickersDialogs

יצירת דיאלוגים סטנדרטים לקבלת תאריך ושעה מהמשתמש, העברת הזמן הנוכחי והצגת הזמן שנבחר על המסך.

DatePickerDialog

TimePickerDialog

Calaneder

https://youtu.be

/aZIqFE_O6NY

ProgressDialogExample

יצירת דיאלוג המראה התקדמות של תהליכים, תהליך ראשון לא דטרמיניסטי, כלומר נמשך לנצח ועד שנוריד אותו ואילו התהליך השני כן דטרמיניסטי ובו מוצג אחוז ההתקדמות (בתרגיל מדומה עבודת רקע בתהליך נוסף באמצעות Thread.sleep)

ProgressDialog

Thead

Handler

https://youtu.be

/Wkw-Fvs2Dhs


 

מודול 5 – ListView, GridView, RecyclerView & Adapters

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

ArrayAdapter

Example

יצירת רשימה נגללת סטטית באמצעות מערך של מחרוזות, ודינמית כאשר אפשר להוסיף ולהוריד אלמנטים באמצעות ArrayList.

ArrayAdapter

AdapterView

ListView

https://youtu.be

/L_kdh5PKdQo

ListActivity

Example

מחלקה היורשת מ Activity ומנהלת רשימה באופן מובנה, הצגת custom objects בתאים מעוצבים אישית אך עדיין התאמה בין טקסט ל textview

ListActivity

https://youtu.be

/Sz66b-QBBcE

SimpleAdapterExample

מיפוי של טקסט ל textview, בוליאני ל checkbox ו drawable resource ל imageview דרך הצגת מידע על מדינות (שם, האם שווה לגור ותמונת דגל) ברשימה נגללת.

SimpleAdapter

https://youtu.be

/NLkUtebkLY4

CustomAdapter

Example

יצירת custom adapter כדי להתאים כל אובייקט לכל תא. הוספת כפתור מעבר לדוגמת המדינות ויצירת שני סוגי תאים שונים לסל המחזור של הרשימה.

BaseAdapter

https://youtu.be

/pyeqJAo1jAE

GridViewExample

הצגת תמונות בגלריה. באמצעות override על ה getview של arrayadapter והתאמה בין drawable resourse ל imageview  

GridView

https://youtu.be

/sA2nuC1QRzA

AutoCompleteTextView

Example

הדגמת שני רכיבים ויזואלים שונים אשר גם נעזרים ב adapter לצורך קבלת המידע ומטרתם לבצע השלמה אוטומטית של טקסט, חד ורב פעמית

AutoComplete

TextView

MultiAutoComplete

TextView

https://youtu.be

/KLfgyYug5HQ

RecyclerViewExample

עבודה עם שני רכיבים מתוך ה material design והם recyclerview  להצגת רשימה נגללת ו cardview המיועד להיות התא ברשימה. שימוש ב custom adapater ובתבנית ה ViewHolder אשר שומר את האלמנטים בתא וחוסך את הצורך החוזר ב findviewbyid. קבלת האירועים באמצעות יצירת ממשק להעברת הודעות בתוך ה adapterוישום הפונקציות ב activity. בתרגיל הוצגה רשימת המדינות בקלפים.

RecyclerView

ViewHolder

CardView

https://youtu.be

/1ky0C9sIk-0

 

מודול 6 – Asynchronous programming

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

ThreadExample

יצירת תהליך רקע באמצעות ירושה מהמחלקה Thread של ג׳אווה. הורדה של תמונה כבדה מהאינטרנט ועדכון ממשק המשתמש באמצעות מחלקת Handler המיועדת להעברת מסרים

Thread

Handler

URL

HttpUrlConnection

https://youtu.be

/rGtBACOef04

AsyncTaskExample

הורדה נוספת של תמונה גדולה מהאינטרנט הפעם תוך עדכון UI רציף המציג את התקדמות ההורדה ב Progress dialog באמצעות ירושה מהמחלקה AsuncTask

AsyncTask

https://youtu.be

/8nkpBodmU_A

PicasoExample

שימוש בספריית עזר חיצונית להורדה ועיבוד מהירים מאוד של תמונות, אין צורך ביצירת תהליך רקע הכל נעשה באופן אוטומטי

Picaso

https://youtu.be

/uD2IJ-tMY5g

 

מודול 7 – Notifications

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

NotificationExample

הדגמת הקפצת notification למגירת המשימות של המכשיר וביטולה. לאחר מכן הוספת פעולה (action) בלחיצה על notification. הבנת שדות notification השונים.

NotificationManager

Notification

Notification.Builder

PendingIntent

https://youtu.be

/9i_Rv8qu-Wk

NotificationRemote

ViewsExample

יצירת עיצוב משלנו ל notification והעברתו למערכת ההפעלה כולל המאזינים לאירועים. בדוגמה שעשינו בכיתה הראינו notification אשר מאפשרת לשלוט בנגינת מוזיקה.

RemoteViews

https://youtu.be

/dI5vBgzLQog

ProgressNotfication

Example

הורדת תמונה בתהליך אחורי באמצעות AsyncTask שנלמד בשיעור הקודם אך עדכון ההתקדמות יוצג ב notification ולא ב Progress dialog כפי שעשינו.

https://youtu.be

/zOr_VE8bhZI

 

מודול 8 – Services

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

SimpleServiceExample

למידת component נוסף באפליקציית האנדרואיד שנקרא Service. הבנת ההבדל בין שירות (service) מותחל     (started) לקשור (binded). הבנת מחזור החיים של ה service והפעלתו עלי ידי explicit intent. בכיתה דימינו עבודה של ספירה עם המתנה, פעם בתהליך הראשי ופעם באחורי. היתרון בעבודה כזו היא שאנו יכולים לייצר כמה משימות רקע שנרצה ב service

Service

https://youtu.be

/nDXJBUYkQ9s

BackgroundCounter

Service

בעוד ירושה מ Service מבצעת תהליך על ה thread הראשי ירושה מ IntentService שולחת עבודת ל thread אחורי בתור משימות המנוהל באופן אוטומטי על ידי המחלקה הזו. הדגמנו גם כן ספירה עם המתנה.

IntentService

https://youtu.be

/rzMsGb35WDI

ForegroundService

Example

בעוד כל Service רגיל יכול להיהרג על ידי המערכת בתנאי זיכרון נמוכים, ForegroundService יכול לחיות לנצח. המעבר למצב foreground נעשה על ידי ה service עצמו באמצעות notification שמעידה על קיומו.

https://youtu.be

/Lqjh5Ak1LTs

MusicPlayer

הדגמת כל החומר הנלמד באמצעות יצירת נגן מוזיקה. הנגן הוא בעצם foreground service אשר מנגן שיר אחד שנטען מהאינטרנט ומאפשר למשתמש לעצור ולהמשיך את הניגון. כל עוד השיר מתנגן מוצגת notification מתאימה למשתמש.

MediaPlayer

https://youtu.be

/aESn5EMOcPo


 

מודול 9 – BroadcastReceiver

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

SmsReceiver

Example

הדגמת רכיב (component) נוסף באפליקציה האנדרואיד והוא מקבל ההודעות – BroadcastReceiver.

מטרתו לקבל הודעה אליה הוא רשום באופן משתמע באמצעות ה intent-filter או באופן מפורש. בעת קבלת ההודעה מערכת ההפעלה תייצר אותו ותקרא לפונקציה ייעודית. בכיתה הדגמנו הרשמה לשדר של SMS שהתקבל. קראנו את המספר של שולח ההודעה ואת ההודעה  עצמה ומעבר להצגתה גם שלחנו שדר פנימי נוסף שייצרנו בעצמנו אשר מעביר את המידע ל activity במידה והוא חי.

BroadcastReceiver

SmsMessage

https://youtu.be

/lnUYvQj9nkU

ScreenOnOffReceiver

Example

בעוד לשדר הקודם של קבלת ה sms יכולנו להירשם ב manifest, כלומר כל עוד האפליקציה מותקנת, קיבלנו את השדר. ישנם שדרים אשר ההרשמה להם דורשת רכיב חי, אלו הם שדרים מאוד תדירים והמערכת דורשת רכיב חי הרשום אליהם כדי לחסוך בזיכרון. בשיעור הדגמנו הרשמה לשדרים של כיבוי והדלקת המסך באמצעות foreground service (הוא הרכיב החי)

RingtoneManager

Ringtone

https://youtu.be

/2Q6y5CclBdw

LocalBroadcast

ManagerExample

בתרגיל הראשון ראינו כיצד יכולנו להירשם בצורה דינמית (בג׳אווה) לשדר שאנחנו יצרנו ולשלוח אותו. הבעיה הייתה שהשדר עובר בכל המערכת. כאן אנחנו מכירים מערכת ביצוע אותה משימה בדיוק רק שהשדרים המועברים בה הם פרטיים לאפליקציה.

LocalBroadcast

Manager

https://youtu.be

/tpsX7KGGEGU

 

 

מודול 9 + 10 (תוספת) – Android Oreo background limitations

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

JobScheduler

Example

אנדרואיד Oreo הציגה מגבלות חדשות של עבודה ברקע, כלומר ללא מודעות המשתמש. החל מאמדרואיד 8.0 כל אפליקציה אשר מבצעת איזושהי עבודה ברקע חייבת לעדכן את המשתמש על כך אחרת היא לא תוכל לבצעה. המגבלה חלה גם על Services וגם על Broadcast Receivers. כפתרון נראה גם את מחלקת JobScheduler אשר מאפשרת לתזמן משימות עתידיות על פי משאבי המערכת.

JobScheduler

JobInfo

JobManager

https://youtu.be

/YCTxiXhxyrg

 

מודול 10 – Scheduling tasks

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

TimerExample

הדגמה של משימה חוזרת במרווח קבוע, הדגמנו ספירה לאחרונה עד אפס ופיצוץ בסוף. זאת עשינו באמצעות המחלקה Timer של ג׳אווה ושליחת TimerTask שהיא תבצע. החיסרון היחיד היה שביצוע המשימה מצריך הישארות בתוך האפליקציה.

Timer

TimerTask

https://youtu.be

/gv84v0WsL3I

AlarmManagerExample

כאשר נרצה לבצע משימה גם כאשר המשתמש נמצא מחוץ לUI שלנו ונצרך להשתמש ב AlaramManager. הוא מקבל PendingIntents לביצוע מאוחר יותר (או מדויק או לא מדויק) או לביצוע חוזר. ראינו את שני סוגי השעונים RTC אשר מודד זמן מאז 1970 ו Elapsed אשר מודד זמן מאז ה Boot. בכיתה יצרנו אפליקציה שמטרתה לתזמן SMS לעתיד (חוזרים וחד פעמים) כאשר המשתמש מזין את המספר, הטקסט והזמן ואנו שולחים את ההודעה בדיוק במועד שנרשם.

AlarmManager

https://youtu.be

/8BVwyG_lXAs

 

מודול 11 – Fragments

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

FragmentExample

בתרגיל זה ראינו כיצד ניתן לפצל את המסך לתתי יחידות קטנות הנקראות Fragments כך שכל יחידה היא עצמאית מבחינת המסך והטיפול באירועים. למדנו את מחזור החיים של ה fragment. ואת היכולת לצרף אותו לactivity תחת הורה מוגדר מראש. כיצד ניתן להסיר ולהחליף בין fragemnts. כיצד ניתן לייצר עסקאות fragmants ולשמור אותם במחסנית ה back כך שלחיצה על הכפתור תסיר את העסקה האחרונה. ראינו כיצד ניתן להעביר מידע אל ה fragment בעת יצירתו בעזרת factory method. וכיצד ניתן לקבל ממנו אירועים בצורת הפרוטוקול תקשורת(interface) והגדרת ה activity כ callback.

בדוגמה שעשינו יצרנו מסך הרשמה שמקבל את שם המשתמש ומחזיר לנו את הססמה שהוא הכניס.

Fragment

FragmentManager

FragmentTransaction

https://youtu.be/

BYRxzSGMfLM

בחלק זה של התרגיל לקחנו את הדוגמה ממוקדם ולאותו activity הוספנו גם ListFragemnt שזוהי מחלקה היורשת מ fragment ומנהלת רשימה, בדומה ל list activity וכן ראינו DialogFragent שזה בעצם fragemnt המנהל דיאלוג ומאפשר שליטה מלאה יותר על מחזור החיים שלו, עיצוב נוח יותר וכן הגדרתו במחלקה לשימוש חוזר.

ListFragemnt

DailogFragment

https://youtu.be/

nr-Inon1vKY

PreferenceFragment

Example

בדוגמה הזו יצרנו מסך הגדרות לאפליקציה שלנו. את הגדרות המסך קבענו בקובץ xml עם אלמנטים מיוחדים שכל שינוי בהם נשמר אוטומטית ב shared preference טענו את מסך ההגדרות הזה על גבי activity כדי שנוכל להפעיל אותו למען קבלת התוצאה.

PreferenceFragment

PrefernceManager

https://youtu.be/

hwcBSlBaYPw

ViewPagerExample

אלמנט וויזואלי המאפשר להחליף בין fragments על יד swiping האלמנט הוא מתוך ה support library לכן גם ה fragmnets היו מתוך ה support library. האלמנט נעזר ב adapter המספק לו fragment ע"פ מיקום לכן יצרנו fragment אחד לכל המדינות ולפי enum המגדיר את המדינה טענו בכל פעם דגל ושם אחר. מאוחר יותר גם הפכנו את ה adapter להיות ״אינסופי״

ViewPager

FragmentStatePagerAdapter

https://youtu.be

/__WMJV0UEbU


 

 

 

מודול 12 – Sensors

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

LocationExample

שימוש בחיישני המיקום באמצעות ספריית ה android.location בעת קבלת מנהל המיקום נציין האם אנו מעוניינים במיקום מדויק המבוסס GPS, מיקום יותר כללי ויותר חסכוני באמצעות אנטנות סלולר או מיקום פסיבי אשר מתבסס על בקשות מיקום של אפליקציות אחרות. נלמד להגדיר קריטריונים ולקבל את הספק מיקום המתאים ביותר לקריטריונים. נקבל את המיקום הנוכחי של המשתמש ולאחר מכן נשתמש בשרותי ה geocoding של גוגל כדי לקבל את הכתובת לפי נקודת הציון שקיבלנו.

LocationManager

Location

Geocoder

Criteria

https://youtu.be

/o6QBG4Gvqew

FusedLocation

Example

הספריה הקודמת למרות פשטותה הפכה להיות Legacy ומוחלפת בשרותי המיקום של google play ההבדל המהותי ביותר הוא שכעת אנחנו לא מציינים ספק אלא יוצרים בקשה ודרישות ונותנים לספריה לבחור את הספק המתאים ביותר עבורנו. נלמד איך להתחבר לשרותי גוגל באמצעות הגדרת לקוח ולייצר בקשות מיקום שונות.

LocationServices

FusedLocationApi

LocationRequest

https://youtu.be

/qzpbtA1AZK4

SensorExample

בדוגמה הזו למדנו כיצד לקבל מידע מחיישן האקסלרומטר המזהה את מנח הטלפון לפי תאוצת הטלפון בשלושת הצירים: x,y,z. נלמד כיצד החיישן הזה יכול להתחלף בכל חיישן אחר באמצעות העברת מחרוזת אחרת המייצגת את החיישן. כל שאר הדברים נשארים אותו דבר וכך האקסלרומטר יהווה רק דוגמה מייצגת לייתר החיישנים.

SensorManager

Sensor

SensorEvent

https://youtu.be

/rocbpxTYQmo

TouchExample

החיישן האחרון בחלק זה הוא המגע, נלמד כיצד לאתר אותו ברמת ה activity כיצד לקבל את האירוע ולפרק אותו לסוג (אצבע הונחה, הוזזה, הורמה) מיקום, מספר האצבעות הנוגעות ומיקום כל אצבע. נדבר על שרשת התגובות לאירוע, כאשר כל אחד יכול למצות את הטיפול בו או להמשיך להעביר אותו הלאה.

TouchEvent

https://youtu.be

/Pj7wpWhwljI

 

מודול 13 – Advance UI

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

RedXTextViewExample

בתרגיל זה נירש מTextvView ובאמצעות   override על הפונקציה onDraw אשר נקראת על יד מערכת ההפעלה כאשר ה view צריך לצייר עצמו על המסך נוסיף X אדום מעל או מתחת לטקסט. נוכל לשלב את ה text view החדש הזה בקלות בכל layout על ידי ציון הנתיב המלא.

Paint

Canvas

https://youtu.be

/nBB1_zXXisY

DrawingWidget

Example

בתרגיל זה נייצר רכיב ויזואלי משל עצמנו על ידי ירושה מ View ושמירת מערך של קווים המהווים ציור באמצעות ה touch. כאשר הוספת הקווים תהיה באמצעות override על onTouch בתוך ה view הוא הראשון שמקבל את האירוע (מלבד ה  listener החיצוני שניתן להצמיד). בהמשך נשמור את הציור במערכת הקבצים.

View

https://youtu.be

/St6PkxFpeVU

AnimationExample

בתרגיל הזה רואים את אנימציית ה drawable היא בעצם כמו אנימציית gif וכן את ארבעת סוגי האנימציות הנוספות: שקיפות(alpha), סיבוב (rotate), גודל(scale), ותזוזה (translate). את האנימציות הגדרנו בקבצי  xml.

Animation

AnimatioDrawable

AnimationUtils

https://youtu.be

/T0CiFmeUiRg

ObjectAnimation

בתרגיל זה נלמד על דרכים נוספות לייצר אנימציות. נלמד להחיל אותן באופן אוטומטי מההורה לילדים, נלמד כיצד ניתן לעשות אנימציה כללית על תכונות כל אובייקט, כיצד ניתן לשלב בינהן, ועוד. ההבדל המשמעותי ביותר בין התרגיל הזה לקודמו הוא שהפעם כל האנימציה תוגדר דינמית בג׳אווה ויתרה מכך השינויים שנעשה יהיו ישירות על תכונות האובייקט.

LayoutTransition

ObjectAnimator

AnimatorSet

ValueAnimator

https://youtu.be

/-HwEUfsSxjo

OrientationExample

טיפולים שונים בסיבוב המסך: הטיפול הראשון היה קביעת מנח אחיד ללא סיבוב, בהמשך יצירת עיצוב מובנה בתיקייה מוגדרת שיטען אוטומטית בעת סיבוב, לאחר מכן אמרנו למערכת ההפעלה להשאיר לנו את הטיפול באמצעות configurtion changes וכך להימנע מיצירה מחודשת של ה activity

Configuration

https://youtu.be

/pS0Ce7TKiJI

SavedInstanceState

Example

בכל פעם שמערכת ההפעלה צריכה להרוג את ה activity שלנו כדוגמת שינויי אוריינטציה היא מעבירה אובייקט bundle שמתאר את מצב העצם טרם ההריגה, חלֿק מהנתונים נשמרים בו אוטומטית וניתן לקבל אותו לפני הסגירה ולאחר הטעינה מחדש בפונקציות ייעודיות כדי להטמין ולקרוא ממנו מידע בעצמנו.

SavedInstanceState

https://youtu.be

/m77WwZ2UkzU

 

מודול 14 – Network communication

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

HttpGetPostExample

בתרגיל זה עיקר הדגש יהיה על הצגת ההבדל בין בקשות GET לבקשות POST ועבודה ללא ספריות חיצוניות כדי ליצור את הבקשות בתהליך אחורי להטמין מידע בהתאם לבקשה וקבלת התשובה. עדיין אין עיבוד של התשובות הנשלחות מהשרת.

GET\POST

ContentValues

HttpEntity

https://youtu.be

/tZS8m0YAbT4\

בחלק זה של התרגיל נראה שימוש בספריית אנדרואיד חיצונית שנקראת Volley המאפשרת לנו לבצע בקשות get/post ביתר קלות באמצעות תור משימות אסינכרוני (מבוצע באופן אוטומטי בתהליך אחורי ואין צורך לייצר כזה, כמו בתרגיל הקודם)

Volley

RequestQueue

StringRequest

JsonRequest

https://youtu.be

/PQl6mujMbNU

XmlDomExample

הבנת ה Document Object Model המשמש כממשק כללי לעיבוד מסמך xml המתקבל מהשרת. נראה דוגמה של בקשה get להגדרה מילונית. נבין את ההיררכיה של המסמך וחלוקתו לאובייקטים ברמות שונות.

Document

NodeList

Node

https://youtu.be

/0jGPCzU2wwo

JSONExample

בדוגמה זו נראה את הפורמט המקובל ביותר להעברת מידע בין מכונות ומובן גם לאנשים (כמו xml) הנקרא JSON. נבין מהוא אובייקט JSON כיצד הוא מאורגן ומהוא מערך JSON. בדוגמה הזו נעשה שימוש בשרותי ה webservice של המפות של גוגל לצורך geocoding – לקבלת כתובת בהעברת נקודת ציון, וניתוח התשובה שהתקבלה כקובץ JSON.

JSONObject

JSONArray

JSONException

https://youtu.be

/SNnLk6KKAu0


 

מודול 15 – SQLite Database & Content providers

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

DataBaseExample

בדוגמה הזו ראינו שימוש בטבלאות SQL הנשמרות ב internal storage של האפליקציה באמצעות מסד נתונים SQLite יצרנו טבלה של משתמשים. הוספנו לה נתונים קראנו אותם ממנה וכן ביצענו חיפוש על הטבלה. השתמשנו גם בהרצת שאילתות מלאות בתחביר SQL וכן בפונקציות העזר שיש לנו באנדרואיד כדי להוסיף נתונים ולברר מידע.

SQLiteDatabase,

Cursor

SELECT, INSERT,

WHERE, LIKE,

CREATE TABLE,

PRIMARY KEY

https://youtu.be

/zyX6Wklj0LA

ContactsExample

בדוגמה הזו אנו נעזרים ב getContentResolver כדי לקבל cursor  לטבלת הטלפונים של אנשי הקשר במכשיר של המשתמש. נטען אותם אחד לאחר השני לתוך רשימה ונציגה למשתמש. באופן זו נוכל לקרוא את כל מסדי הנתונים הפנימיים במכשיר.

ContactContract

Contact

Phone

https://youtu.be

/mghy2Auh6IQ

ContactsPickerExample

בדוגמה הזו מציג למשתמש את ספר הטלפונים לבחירה של איש קשר כלשהו ונציג את פרטי איש הקשר שנבחר

ACTION_PICK

SimpleCursorExample

בדוגמה הזו נעשה שימוש במתאם הדומה ל simple adapter שראינו מקודם אך כאן ההתאמה תעשה באופן אוטומטי בין שמות של עמודות במסד הנתונים למערך id's של אלמנטים ויזואלים בתא שלנו.

SimpleCursorAdapter

https://youtu.be

/MY-VlrsRMO4

בכל הדוגמאות שראינו עד עכשיו טענו את כל המידע על התהליך הראשי ובכל יצירה של ה activity טענו אותו מחדש. על ידי שימוש במחלקת Loader נטען את ה cursor בצורה אסינכרונית והוא ינהל אותו בין sessions שונים של ה activity

LoaderManager

CursorLoader

https://youtu.be

/J-eUcMglJcw


 

מודול 16 – Material design

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

MaterialDesign

Example

בחלק הראשון של שימוש בתבנית העיצוב החדשנית של גוגל נראה כיצד להוסיף את ספריית התמיכה כדי לתמוך במערכות ההפעלה שקדמו ל material design.

נוסיף לאפליקציה סרגל עליון משלנו ונקבל את הלחיצה על כפתור ה home שישלוף מגירה המכילה את תפריט האפליקציה.

לאחר מכן נלמד כיצד לייצר מגירה נשלפת משמאל או מימין למסך, איך לקבוע את התפריט ולעצב אותו עם כותרת מותאמת אישית. כיצד לקבל את האירועים בתפריט הזה ולשנות אותו באופן דינמי.

ActionBar

NavigationView

DrawerLayout

https://youtu.be

/mGrUgG7–Bs

בהמשך לתבניות העיצוב נלמד כיצד לייצר את הכפתור הצף האופייני כל כך לעיצוב החדש ולקבל ממנו את הפעולה. כיצד להשתמש ב snackbar הרי הוא ה toast החדש כאשר נמצאים בתוך האפליקציה וכיצד להשתמש ב coordinator layout אשר בהתאם למחלקת ה behavior הפנימית של כל אלמנט יכול להתנות הזזה של אלמנט אחד בהתאם לשני. במקרה שלנו נלמד כיצד להעלות את הכפתור הצף כאשר יופיע ה snack bar.

נלמד גם כיצד לעטוף edit text באלמנט חדש אשר יכול לשמור על ה hint שלא יעלם כאשר מכניסים טקסט ובמקום הוא נשמר מעל.

FloatingActionButton

SnackBar

CoordinatorLayout

InputTextEditText

https://youtu.be

/j-GxJ4PWgAI

בחלק האחרון בינתיים של ה Material design נלמד כיצד להוסיף תפריט של טאבים אשר יציג את כותרות ה fragments המחלפים ב viewpager בתוך הטאבים. נלמד גם על appbar layout שיכול לתאם בין התנהגות התפריט העליון לרכיבים שמתחתיו בין אם זה גלילת רשימה או כל דבר אחר.

TabLayout

AppBarLayout

https://youtu.be

/LQWiI7C2aD0

 

מודול 17 – Firebase & Material Design

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

FirebaseMaterial

Example

בחלק זה נייצר אפשרות להרשמה והתחברות של משתמשים  באמצעות כתובת מייל וססמה. על בסיס הקובץ הקודם נייצר אפשרות הרשמה והתחברות. כל מאגר המשתמשים ישמר בשרתי Firebase. נלמד כיצד נשמר ה session של המשתמש וכיצד לסיים אותו וכיצד להבדיל בין משתמש שהתחבר ושנרשם פעם הראשונה.

Firebase

FirebaseAuth

FirebaseUser

FirebaseAuthListener

https://youtu.be

/JrlzUCaRH2c

בחלק זה של תרגיל המשימות, נייצר את אובייקט המשימה ואת ה recycler שיציג את המשימות. לצורך כך נגדיר adapter מיוחד הנקרא Mission Adapter אשר יודע להתאים בין אובייקט המשימה אל התא ב cardview בתוך ה recycler אשר יציג את המשימה. חלק זה כולל את כל התשתית של המשימות כולל הוספת עדכון ומחיקה שלהם באמצעות ממשק יעודי שמגדיר ה adapter אך עדיין המשימות לא ישמרו ב database

https://youtu.be

/pAvzTi9PvLc

רק בחלק זה נשמור את משימות המשתמש ב Database של ה firebase זהו מסד נתונים המתעדכן בזמן אמת. כאשר נייצר טבלת משתמשים, כל משתמש ישמר תחת ה User id הייחודי שלו, וכל המשימות שלו ישמרו שם. מסד נתונים זה יהיה נגיש בהמשך גם לאפליקציות ios ו web. וכך הוא יוכל לגשת למשימות שלו ממכשירים שונים. נשמור במסד הנתונים את מחיקת המשימה ואת סיומה.

FirebaseDatabase

DatabaseReference

DataSnapshot

https://youtu.be

/MVLHAJSV2SE

הוספנו לתרגיל המשימות תמונה בראש העמוד אשר מתרחבת ונעלמת בעת גלילת המשימות. זהו רכיב מאוד אופייני ל material design.

CollapsingToolbarLayout

https://youtu.be

/C0VBcq445RI

FirebaseMessaging

Example

בתרגיל זה ראינו אפשרויות שונות להעביר הודעות, ראשית העברנו הודעות לכל משתמשי האפליקציה באמצעות ממשק הניהול, ולאחר מכן ראינו אפשרות להעביר הודעות בתוך האפליקציה בין המשתמשים השונים באמצעות הרשמה ל topics  מסוימים ושימוש בספריית volley כדי לייצר בקשות post הכוללות את גוף הnotification. יש כאן אפשרות של משתמשים לשלוח הודעות אחד לשני כדוגמת וואטסאפ.

FirebaseMessaging

FirebaseMessagingService

RemoteMessage

https://youtu.be

/0IEoOAsBLu0

 

מודול 18  – Floating widgets

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

FloatingWidget

Example

יצירת Widget צף על פני כל האפליקציות ועל מסך הבית, כדוגמת הפרצופים בצ׳ט של Facebook Messenger. ה Widget צף מעל כל האפליקציות, לא משנה היכן המשתמש נמצא ומאפשר פתיחת תפריט מהיר מכל מקום. מתאים מאוד לנגני מוזיקה הרוצים לאפשר למשתמש שליטה בכל זמן.

WindowManager

 https://youtu.be/

 

מודול 19  – App shortcuts

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

AppShortcuts

Example

החל מאנדרואיד 7.0 ניתן להצמיד פעולות מהירות ושימושיות לאפליקציה אשר יעלו בתפריט קופץ לאחר לחיצה ארוכה על האייקון שלה. בחלק זה נלמד כיצד להגדיר פעולות כאלו גם באופן סטטי, כלומר בעת יצירת האפליקציה וגם באופן דינמי ותוך כדי ריצת התכנית למשל לצפייה בפרק האחרון שנצפה, לחזרה למקום האחרון באפליקציה שהיית לפני הסגירה וכו׳

ShortcutInfo

ShortcutManager

https://youtu.be/

 

 

מודול 20 (בונוס) – Creating home screen widgets

שם הפרויקט

תיאור

מחלקות נלמדות

קישור לווידאו

HomeScreen

WidgetExample

יצירת Widget של פנס למסך הבית. בתרגיל זה נראה כיצד ניתן להוסיף לאפליקציה שלנו את הפונקציונלית של ה Widgets. הם מייצגים פונקציונלית מסוימת מתוך האפליקציה שלנו שאנו רוצים לאפשר למשתמש בשימוש מהיר ממסך הבית. בדוגמה נייצר widget של פנס על ידי עבודה ברמה נמוכה עם ממשק המצלמה.

AppWidgetProvider

Camera

Camera.Parameters

SurfaceView

SurfaceHolder

https://youtu.be

/YCTxiXhxyrg