Android Course Materials
מודול 1 – ממשק משתמש – User Interface |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
אפליקציה זו היא משחק פשוט עם שני כפתורים: אחד המעלה ניקוד והשני מוריד, התוצאה מוצגת בתיבת טקסט ומתעדכנת בזמן אמת. |
OnClickListener, Button, TextView, LinearLayout |
|
||
הדגמה של קבלת שם מהמשתמש ובעת לחיצת כפתור נאמר לו שלום אישי בתיבת טקסט נפרדת. |
EditText |
|
||
כאן נלמד את נושא ה Layouts המשמשים לארגון האלמנטים במסך. לכל אחד יש לוגיקה שונה. בפרויקט זה נעבוד רק ב xml, ונלמד כיצד לחלק את המסך באופן יחסי בין הילדים, לארגן בטבלה, באופן יחסי אחד לשני או להורה או מיקום על פי המסגרת. |
LinearLayout Weight, RelativeLayout, TableLayout, FrameLayout |
|
||
יצירת ה UI גם ב xml כמקודם וגם באופן דינמי בקוד ה Java. במסך ישנה תיבת טקסט וכפתור, כאשר המשתמש מכניס מספר ולוחץ על הכפתור. נוצרים במסך כפתורים חדשים לפי המספר שהוכנס. מכיוון שמספר הכפתורים ידוע בזמן ריצה לא נוכל לייצר אותם ב xml. |
Toast |
|
||
דוגמה מסכמת GUI כוללת הצגת תמונה ושינוי השקיפות והגודל שלה, מתג המעלים אותה (גם לפנות את המקום שלה ב layout), כפתור עם תמונה המתחלף בין מצבים, תיבת טקסט אשר מצפה לקבל סוגי קלטים שונים ומשנה את המקלדת בהתאם, אפשרות לגלילה אופקית של תמונות של חתולים וכן שילוב של הוספת רכיבים דינמיים והחלפת החתולים בכפתורים. |
ImageView, Seekbar, Switch, Visibilty, ToggleButton, EditText InputType, ImageButton, State-list, HorizontalScrollView |
|
מודול 2 – הפעלת רכיבים באמצעות Intents |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
פתיחת רכיב שלנו בצורה מפורשת על ידי ציון שמו ושליחת הבקשה למערכת. התרגיל כולל העברת מידע ביניהם. המשתמש מזין את שמו בתיבה לוחץ על הכפתור והשם עובר ומוצג במסך השני. |
Intent, Bundle |
|
||
פתיחת רכיב חדש על ידי בקשת פעולה מסוימת ושליחתה למערכת (הפעלה משתמעת), במקרה שלנו המשתמש מכניס מספר טלפון ואנו שולחים למערכת בקשת חיוג עם מספר הטלפון שהוזן. היא פותחת את החייגן. |
ACTION_DIAL |
|
||
מנגנון ההרשאות החדש דורש בקשת ההרשאות בזמן ריצה בעת הצורך ולא בזמן ההתקנה. הדגמה של הנושא דרך בקשת חיוג (ביצוע החיוג בעצמנו ולא פתיחת חייגן). |
ACTION_CALL |
|
||
דוגמה מתקדמת להפעלה המשתמעת (על ידי פעולה), הדגמת פעולת השליחה המיועדת להעברת מידע והדגמה על ידי בקשת מייל, לאחר מכן יצירת רכיב שלנו שיכול לענות על בקשת המייל ויקפוץ גם הוא על ידי המערכת, הדגמה של הפעולה הנפוצה ביותר להצגת מידע למשתמש (action_view) אשר בוחרת את היישום לפי סוג המידע המועבר (פתיחת המפות, אנשי הקשר, הדפדפן, החייגן, והדגמת תקשורת עם Waze, WhatsApp). |
IntentFilter ACTION_SEND ACTION_VIEW Uri Data (Waze & whatsapp api) |
|
||
תרגיל אשר אנחנו מגדירים מתורגמן והרכיבים בו מתקשרים אחד עם השני לא באופן ישיר אלא באופן משתמע כלומר על ידי בקשת פעולה משלנו. ולכן בחלק ב מוסיפים מילון חדש כאפליקציה עצמאית והדגמת השדר משלנו שעובר בכל מערכת ההפעלה וגם הוא מוצג כאפשרות. |
||||
פתיחת רכיב לצורך קבלת תוצאה, יצירת מבחן אמריקאי וקבלת הציון ממנו, פתיחת המצלמה וקבלת התמונה, פתיחת חלון זיהוי דיבור של Google וקבלת הטקסט מתוך הקול ולאחר מכן כבונוס גם השמעתו חזרה באמצעות TTS |
RecognizerIntent, TextToSpeech, RadioButton, RadioGroup, MediaStore, Camera |
|
מודול 3 – Persistent storage |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
תיאור מחזור החיים של ה Activity באמצעות הדפסת הודעות חיווי בפונקציות מחזור החיים השונות הנקראות ע״י המערכת. הסבר על מעגל האקטיביות, הויזיביליות והחיים. |
|
|||
שמירת נתונים בסיסיים (פרימיטיביים ומחרוזות באובייקט ה Shared Preferences וגישה אליו מרכיבים (Activities) שונים. |
Shared Preferences |
|
||
שמירת מידע ב Internal storage. עבודה עם ה Streaming של Java לקריאת מידע וכתיבתו. חיבור ה Stream ל File מצד אחד ומצד שני ל Reader ו Writer. הוספת מידע לקובץ שכבר קיים בזיכרון הפנימי. |
FileInputStream FileOutputStream InputStreamReader InputStreamWriter BufferedReader BufferedWriter MODE_APPEND |
|
||
שמירת תמונות ב Internal storage באמצעות פונקציות נוחות המגיעות עם ה Bitmap |
Bitmap BitmapFactory Compression |
https://youtu.be | ||
שמירת כל האובייקטים ב Internal storage באמצעות מימוש Serializable |
Serializable ObjectOutputStream ObjectInputStream |
|
||
שמירת אובייקטים עם שדות שאינם יכולים לעבור סיריאליזציה, ביצוע החרגה של שדות אלו באמצעות transient (הדגמה על Bitmap), ושמירתם באמצעות המנגנון הייחודי של readObject ו writeObject |
transient readObject writeObject |
|
||
שדרוג התרגיל מהמודול הקודם על ידי שמירת התמונה המצולמת בגודלה המלא ב External storage |
External storage Environment File |
|
מודול 4 – Menus and Dialogs |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
יצירת תפריט ייחודי לכל Activity. תפריט פשוט עם שמירה וטעינה של מידע ב SharedPrefs |
Menu Option menu AppCompatActivity |
|
||
יצירת תפריטים שונים אשר ניתן להצמידם לרכיבים וויזאולים. התפריטים עולים בלחיצה ארוכה על הרכיב ומופיעים לידו או בתפריט העליון. |
Context Menu Contextual action mode Popup Menu |
https://youtu.be | ||
יצירת דיאלוג פשוט המופיע לפני סגירת התכנית ומבקש אישור לסגירה |
AlertDialog AlertDialog.Builder onBackPressed |
|
||
יצירת דיאלוגים המציגים רשימות. רשימה חופשית לבחירה, רשימה עם תיבות סימון ורשימה עם כפתורי רדיו. |
|
|||
יצירת דיאלוג עם עיצוב משלנו. הדיאלוג הוא מסך הרשמה לקבלת שם וססמה מהמשתמש. |
LayoutInflater
|
|
||
יצירת דיאלוגים סטנדרטים לקבלת תאריך ושעה מהמשתמש, העברת הזמן הנוכחי והצגת הזמן שנבחר על המסך. |
DatePickerDialog TimePickerDialog Calaneder |
|
||
יצירת דיאלוג המראה התקדמות של תהליכים, תהליך ראשון לא דטרמיניסטי, כלומר נמשך לנצח ועד שנוריד אותו ואילו התהליך השני כן דטרמיניסטי ובו מוצג אחוז ההתקדמות (בתרגיל מדומה עבודת רקע בתהליך נוסף באמצעות Thread.sleep) |
ProgressDialog Thead Handler |
|
מודול 5 – ListView, GridView, RecyclerView & Adapters |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
יצירת רשימה נגללת סטטית באמצעות מערך של מחרוזות, ודינמית כאשר אפשר להוסיף ולהוריד אלמנטים באמצעות ArrayList. |
ArrayAdapter AdapterView ListView |
|
||
מחלקה היורשת מ Activity ומנהלת רשימה באופן מובנה, הצגת custom objects בתאים מעוצבים אישית אך עדיין התאמה בין טקסט ל textview |
ListActivity
|
|
||
מיפוי של טקסט ל textview, בוליאני ל checkbox ו drawable resource ל imageview דרך הצגת מידע על מדינות (שם, האם שווה לגור ותמונת דגל) ברשימה נגללת. |
SimpleAdapter |
|
||
יצירת custom adapter כדי להתאים כל אובייקט לכל תא. הוספת כפתור מעבר לדוגמת המדינות ויצירת שני סוגי תאים שונים לסל המחזור של הרשימה. |
BaseAdapter |
|
||
הצגת תמונות בגלריה. באמצעות override על ה getview של arrayadapter והתאמה בין drawable resourse ל imageview |
GridView |
|
||
הדגמת שני רכיבים ויזואלים שונים אשר גם נעזרים ב adapter לצורך קבלת המידע ומטרתם לבצע השלמה אוטומטית של טקסט, חד ורב פעמית |
AutoComplete TextView MultiAutoComplete TextView |
|
||
עבודה עם שני רכיבים מתוך ה material design והם recyclerview להצגת רשימה נגללת ו cardview המיועד להיות התא ברשימה. שימוש ב custom adapater ובתבנית ה ViewHolder אשר שומר את האלמנטים בתא וחוסך את הצורך החוזר ב findviewbyid. קבלת האירועים באמצעות יצירת ממשק להעברת הודעות בתוך ה adapterוישום הפונקציות ב activity. בתרגיל הוצגה רשימת המדינות בקלפים. |
RecyclerView ViewHolder CardView |
|
מודול 6 – Asynchronous programming |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
יצירת תהליך רקע באמצעות ירושה מהמחלקה Thread של ג׳אווה. הורדה של תמונה כבדה מהאינטרנט ועדכון ממשק המשתמש באמצעות מחלקת Handler המיועדת להעברת מסרים |
Thread Handler URL HttpUrlConnection |
|
||
הורדה נוספת של תמונה גדולה מהאינטרנט הפעם תוך עדכון UI רציף המציג את התקדמות ההורדה ב Progress dialog באמצעות ירושה מהמחלקה AsuncTask |
AsyncTask |
|
||
שימוש בספריית עזר חיצונית להורדה ועיבוד מהירים מאוד של תמונות, אין צורך ביצירת תהליך רקע הכל נעשה באופן אוטומטי |
Picaso |
|
מודול 7 – Notifications |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
הדגמת הקפצת notification למגירת המשימות של המכשיר וביטולה. לאחר מכן הוספת פעולה (action) בלחיצה על notification. הבנת שדות notification השונים. |
NotificationManager Notification Notification.Builder PendingIntent |
|
||
יצירת עיצוב משלנו ל notification והעברתו למערכת ההפעלה כולל המאזינים לאירועים. בדוגמה שעשינו בכיתה הראינו notification אשר מאפשרת לשלוט בנגינת מוזיקה. |
RemoteViews |
|
||
הורדת תמונה בתהליך אחורי באמצעות AsyncTask שנלמד בשיעור הקודם אך עדכון ההתקדמות יוצג ב notification ולא ב Progress dialog כפי שעשינו. |
|
מודול 8 – Services |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
למידת component נוסף באפליקציית האנדרואיד שנקרא Service. הבנת ההבדל בין שירות (service) מותחל (started) לקשור (binded). הבנת מחזור החיים של ה service והפעלתו עלי ידי explicit intent. בכיתה דימינו עבודה של ספירה עם המתנה, פעם בתהליך הראשי ופעם באחורי. היתרון בעבודה כזו היא שאנו יכולים לייצר כמה משימות רקע שנרצה ב service |
Service |
|
||
בעוד ירושה מ Service מבצעת תהליך על ה thread הראשי ירושה מ IntentService שולחת עבודת ל thread אחורי בתור משימות המנוהל באופן אוטומטי על ידי המחלקה הזו. הדגמנו גם כן ספירה עם המתנה. |
IntentService |
|
||
בעוד כל Service רגיל יכול להיהרג על ידי המערכת בתנאי זיכרון נמוכים, ForegroundService יכול לחיות לנצח. המעבר למצב foreground נעשה על ידי ה service עצמו באמצעות notification שמעידה על קיומו. |
|
|||
הדגמת כל החומר הנלמד באמצעות יצירת נגן מוזיקה. הנגן הוא בעצם foreground service אשר מנגן שיר אחד שנטען מהאינטרנט ומאפשר למשתמש לעצור ולהמשיך את הניגון. כל עוד השיר מתנגן מוצגת notification מתאימה למשתמש. |
MediaPlayer |
|
מודול 9 – BroadcastReceiver |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
הדגמת רכיב (component) נוסף באפליקציה האנדרואיד והוא מקבל ההודעות – BroadcastReceiver. מטרתו לקבל הודעה אליה הוא רשום באופן משתמע באמצעות ה intent-filter או באופן מפורש. בעת קבלת ההודעה מערכת ההפעלה תייצר אותו ותקרא לפונקציה ייעודית. בכיתה הדגמנו הרשמה לשדר של SMS שהתקבל. קראנו את המספר של שולח ההודעה ואת ההודעה עצמה ומעבר להצגתה גם שלחנו שדר פנימי נוסף שייצרנו בעצמנו אשר מעביר את המידע ל activity במידה והוא חי. |
BroadcastReceiver SmsMessage
|
|
||
בעוד לשדר הקודם של קבלת ה sms יכולנו להירשם ב manifest, כלומר כל עוד האפליקציה מותקנת, קיבלנו את השדר. ישנם שדרים אשר ההרשמה להם דורשת רכיב חי, אלו הם שדרים מאוד תדירים והמערכת דורשת רכיב חי הרשום אליהם כדי לחסוך בזיכרון. בשיעור הדגמנו הרשמה לשדרים של כיבוי והדלקת המסך באמצעות foreground service (הוא הרכיב החי) |
RingtoneManager Ringtone |
|
||
בתרגיל הראשון ראינו כיצד יכולנו להירשם בצורה דינמית (בג׳אווה) לשדר שאנחנו יצרנו ולשלוח אותו. הבעיה הייתה שהשדר עובר בכל המערכת. כאן אנחנו מכירים מערכת ביצוע אותה משימה בדיוק רק שהשדרים המועברים בה הם פרטיים לאפליקציה. |
LocalBroadcast Manager |
https://youtu.be |
מודול 9 + 10 (תוספת) – Android Oreo background limitations |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
אנדרואיד Oreo הציגה מגבלות חדשות של עבודה ברקע, כלומר ללא מודעות המשתמש. החל מאמדרואיד 8.0 כל אפליקציה אשר מבצעת איזושהי עבודה ברקע חייבת לעדכן את המשתמש על כך אחרת היא לא תוכל לבצעה. המגבלה חלה גם על Services וגם על Broadcast Receivers. כפתרון נראה גם את מחלקת JobScheduler אשר מאפשרת לתזמן משימות עתידיות על פי משאבי המערכת. |
JobScheduler JobInfo JobManager |
|
מודול 10 – Scheduling tasks |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
הדגמה של משימה חוזרת במרווח קבוע, הדגמנו ספירה לאחרונה עד אפס ופיצוץ בסוף. זאת עשינו באמצעות המחלקה Timer של ג׳אווה ושליחת TimerTask שהיא תבצע. החיסרון היחיד היה שביצוע המשימה מצריך הישארות בתוך האפליקציה. |
Timer TimerTask |
|
||
כאשר נרצה לבצע משימה גם כאשר המשתמש נמצא מחוץ לUI שלנו ונצרך להשתמש ב AlaramManager. הוא מקבל PendingIntents לביצוע מאוחר יותר (או מדויק או לא מדויק) או לביצוע חוזר. ראינו את שני סוגי השעונים RTC אשר מודד זמן מאז 1970 ו Elapsed אשר מודד זמן מאז ה Boot. בכיתה יצרנו אפליקציה שמטרתה לתזמן SMS לעתיד (חוזרים וחד פעמים) כאשר המשתמש מזין את המספר, הטקסט והזמן ואנו שולחים את ההודעה בדיוק במועד שנרשם. |
AlarmManager |
|
מודול 11 – Fragments |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בתרגיל זה ראינו כיצד ניתן לפצל את המסך לתתי יחידות קטנות הנקראות Fragments כך שכל יחידה היא עצמאית מבחינת המסך והטיפול באירועים. למדנו את מחזור החיים של ה fragment. ואת היכולת לצרף אותו לactivity תחת הורה מוגדר מראש. כיצד ניתן להסיר ולהחליף בין fragemnts. כיצד ניתן לייצר עסקאות fragmants ולשמור אותם במחסנית ה back כך שלחיצה על הכפתור תסיר את העסקה האחרונה. ראינו כיצד ניתן להעביר מידע אל ה fragment בעת יצירתו בעזרת factory method. וכיצד ניתן לקבל ממנו אירועים בצורת הפרוטוקול תקשורת(interface) והגדרת ה activity כ callback. בדוגמה שעשינו יצרנו מסך הרשמה שמקבל את שם המשתמש ומחזיר לנו את הססמה שהוא הכניס. |
Fragment FragmentManager FragmentTransaction
|
|
||
בחלק זה של התרגיל לקחנו את הדוגמה ממוקדם ולאותו activity הוספנו גם ListFragemnt שזוהי מחלקה היורשת מ fragment ומנהלת רשימה, בדומה ל list activity וכן ראינו DialogFragent שזה בעצם fragemnt המנהל דיאלוג ומאפשר שליטה מלאה יותר על מחזור החיים שלו, עיצוב נוח יותר וכן הגדרתו במחלקה לשימוש חוזר. |
ListFragemnt DailogFragment |
|
||
בדוגמה הזו יצרנו מסך הגדרות לאפליקציה שלנו. את הגדרות המסך קבענו בקובץ xml עם אלמנטים מיוחדים שכל שינוי בהם נשמר אוטומטית ב shared preference טענו את מסך ההגדרות הזה על גבי activity כדי שנוכל להפעיל אותו למען קבלת התוצאה. |
PreferenceFragment PrefernceManager |
|
||
אלמנט וויזואלי המאפשר להחליף בין fragments על יד swiping האלמנט הוא מתוך ה support library לכן גם ה fragmnets היו מתוך ה support library. האלמנט נעזר ב adapter המספק לו fragment ע"פ מיקום לכן יצרנו fragment אחד לכל המדינות ולפי enum המגדיר את המדינה טענו בכל פעם דגל ושם אחר. מאוחר יותר גם הפכנו את ה adapter להיות ״אינסופי״ |
ViewPager FragmentStatePagerAdapter |
|
מודול 12 – Sensors |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
שימוש בחיישני המיקום באמצעות ספריית ה android.location בעת קבלת מנהל המיקום נציין האם אנו מעוניינים במיקום מדויק המבוסס GPS, מיקום יותר כללי ויותר חסכוני באמצעות אנטנות סלולר או מיקום פסיבי אשר מתבסס על בקשות מיקום של אפליקציות אחרות. נלמד להגדיר קריטריונים ולקבל את הספק מיקום המתאים ביותר לקריטריונים. נקבל את המיקום הנוכחי של המשתמש ולאחר מכן נשתמש בשרותי ה geocoding של גוגל כדי לקבל את הכתובת לפי נקודת הציון שקיבלנו. |
LocationManager Location Geocoder Criteria |
|
||
הספריה הקודמת למרות פשטותה הפכה להיות Legacy ומוחלפת בשרותי המיקום של google play ההבדל המהותי ביותר הוא שכעת אנחנו לא מציינים ספק אלא יוצרים בקשה ודרישות ונותנים לספריה לבחור את הספק המתאים ביותר עבורנו. נלמד איך להתחבר לשרותי גוגל באמצעות הגדרת לקוח ולייצר בקשות מיקום שונות. |
LocationServices FusedLocationApi LocationRequest |
|
||
בדוגמה הזו למדנו כיצד לקבל מידע מחיישן האקסלרומטר המזהה את מנח הטלפון לפי תאוצת הטלפון בשלושת הצירים: x,y,z. נלמד כיצד החיישן הזה יכול להתחלף בכל חיישן אחר באמצעות העברת מחרוזת אחרת המייצגת את החיישן. כל שאר הדברים נשארים אותו דבר וכך האקסלרומטר יהווה רק דוגמה מייצגת לייתר החיישנים. |
SensorManager Sensor SensorEvent |
|
||
החיישן האחרון בחלק זה הוא המגע, נלמד כיצד לאתר אותו ברמת ה activity כיצד לקבל את האירוע ולפרק אותו לסוג (אצבע הונחה, הוזזה, הורמה) מיקום, מספר האצבעות הנוגעות ומיקום כל אצבע. נדבר על שרשת התגובות לאירוע, כאשר כל אחד יכול למצות את הטיפול בו או להמשיך להעביר אותו הלאה. |
TouchEvent |
|
מודול 13 – Advance UI |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בתרגיל זה נירש מTextvView ובאמצעות override על הפונקציה onDraw אשר נקראת על יד מערכת ההפעלה כאשר ה view צריך לצייר עצמו על המסך נוסיף X אדום מעל או מתחת לטקסט. נוכל לשלב את ה text view החדש הזה בקלות בכל layout על ידי ציון הנתיב המלא. |
Paint Canvas |
|
||
בתרגיל זה נייצר רכיב ויזואלי משל עצמנו על ידי ירושה מ View ושמירת מערך של קווים המהווים ציור באמצעות ה touch. כאשר הוספת הקווים תהיה באמצעות override על onTouch בתוך ה view הוא הראשון שמקבל את האירוע (מלבד ה listener החיצוני שניתן להצמיד). בהמשך נשמור את הציור במערכת הקבצים. |
View
|
|
||
בתרגיל הזה רואים את אנימציית ה drawable היא בעצם כמו אנימציית gif וכן את ארבעת סוגי האנימציות הנוספות: שקיפות(alpha), סיבוב (rotate), גודל(scale), ותזוזה (translate). את האנימציות הגדרנו בקבצי xml. |
Animation AnimatioDrawable AnimationUtils |
|
||
בתרגיל זה נלמד על דרכים נוספות לייצר אנימציות. נלמד להחיל אותן באופן אוטומטי מההורה לילדים, נלמד כיצד ניתן לעשות אנימציה כללית על תכונות כל אובייקט, כיצד ניתן לשלב בינהן, ועוד. ההבדל המשמעותי ביותר בין התרגיל הזה לקודמו הוא שהפעם כל האנימציה תוגדר דינמית בג׳אווה ויתרה מכך השינויים שנעשה יהיו ישירות על תכונות האובייקט. |
LayoutTransition ObjectAnimator AnimatorSet ValueAnimator |
https://youtu.be | ||
טיפולים שונים בסיבוב המסך: הטיפול הראשון היה קביעת מנח אחיד ללא סיבוב, בהמשך יצירת עיצוב מובנה בתיקייה מוגדרת שיטען אוטומטית בעת סיבוב, לאחר מכן אמרנו למערכת ההפעלה להשאיר לנו את הטיפול באמצעות configurtion changes וכך להימנע מיצירה מחודשת של ה activity |
Configuration
|
|
||
בכל פעם שמערכת ההפעלה צריכה להרוג את ה activity שלנו כדוגמת שינויי אוריינטציה היא מעבירה אובייקט bundle שמתאר את מצב העצם טרם ההריגה, חלֿק מהנתונים נשמרים בו אוטומטית וניתן לקבל אותו לפני הסגירה ולאחר הטעינה מחדש בפונקציות ייעודיות כדי להטמין ולקרוא ממנו מידע בעצמנו. |
SavedInstanceState |
|
מודול 14 – Network communication |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בתרגיל זה עיקר הדגש יהיה על הצגת ההבדל בין בקשות GET לבקשות POST ועבודה ללא ספריות חיצוניות כדי ליצור את הבקשות בתהליך אחורי להטמין מידע בהתאם לבקשה וקבלת התשובה. עדיין אין עיבוד של התשובות הנשלחות מהשרת. |
GET\POST ContentValues HttpEntity |
|
||
בחלק זה של התרגיל נראה שימוש בספריית אנדרואיד חיצונית שנקראת Volley המאפשרת לנו לבצע בקשות get/post ביתר קלות באמצעות תור משימות אסינכרוני (מבוצע באופן אוטומטי בתהליך אחורי ואין צורך לייצר כזה, כמו בתרגיל הקודם) |
Volley RequestQueue StringRequest JsonRequest |
|
||
הבנת ה Document Object Model המשמש כממשק כללי לעיבוד מסמך xml המתקבל מהשרת. נראה דוגמה של בקשה get להגדרה מילונית. נבין את ההיררכיה של המסמך וחלוקתו לאובייקטים ברמות שונות. |
Document NodeList Node
|
|
||
בדוגמה זו נראה את הפורמט המקובל ביותר להעברת מידע בין מכונות ומובן גם לאנשים (כמו xml) הנקרא JSON. נבין מהוא אובייקט JSON כיצד הוא מאורגן ומהוא מערך JSON. בדוגמה הזו נעשה שימוש בשרותי ה webservice של המפות של גוגל לצורך geocoding – לקבלת כתובת בהעברת נקודת ציון, וניתוח התשובה שהתקבלה כקובץ JSON. |
JSONObject JSONArray JSONException |
|
מודול 15 – SQLite Database & Content providers |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בדוגמה הזו ראינו שימוש בטבלאות SQL הנשמרות ב internal storage של האפליקציה באמצעות מסד נתונים SQLite יצרנו טבלה של משתמשים. הוספנו לה נתונים קראנו אותם ממנה וכן ביצענו חיפוש על הטבלה. השתמשנו גם בהרצת שאילתות מלאות בתחביר SQL וכן בפונקציות העזר שיש לנו באנדרואיד כדי להוסיף נתונים ולברר מידע. |
SQLiteDatabase, Cursor SELECT, INSERT, WHERE, LIKE, CREATE TABLE, PRIMARY KEY |
|
||
בדוגמה הזו אנו נעזרים ב getContentResolver כדי לקבל cursor לטבלת הטלפונים של אנשי הקשר במכשיר של המשתמש. נטען אותם אחד לאחר השני לתוך רשימה ונציגה למשתמש. באופן זו נוכל לקרוא את כל מסדי הנתונים הפנימיים במכשיר. |
ContactContract Contact Phone |
|
||
בדוגמה הזו מציג למשתמש את ספר הטלפונים לבחירה של איש קשר כלשהו ונציג את פרטי איש הקשר שנבחר |
ACTION_PICK |
|
||
בדוגמה הזו נעשה שימוש במתאם הדומה ל simple adapter שראינו מקודם אך כאן ההתאמה תעשה באופן אוטומטי בין שמות של עמודות במסד הנתונים למערך id's של אלמנטים ויזואלים בתא שלנו. |
SimpleCursorAdapter |
|
||
בכל הדוגמאות שראינו עד עכשיו טענו את כל המידע על התהליך הראשי ובכל יצירה של ה activity טענו אותו מחדש. על ידי שימוש במחלקת Loader נטען את ה cursor בצורה אסינכרונית והוא ינהל אותו בין sessions שונים של ה activity |
LoaderManager CursorLoader |
|
מודול 16 – Material design |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בחלק הראשון של שימוש בתבנית העיצוב החדשנית של גוגל נראה כיצד להוסיף את ספריית התמיכה כדי לתמוך במערכות ההפעלה שקדמו ל material design. נוסיף לאפליקציה סרגל עליון משלנו ונקבל את הלחיצה על כפתור ה home שישלוף מגירה המכילה את תפריט האפליקציה. לאחר מכן נלמד כיצד לייצר מגירה נשלפת משמאל או מימין למסך, איך לקבוע את התפריט ולעצב אותו עם כותרת מותאמת אישית. כיצד לקבל את האירועים בתפריט הזה ולשנות אותו באופן דינמי. |
ActionBar NavigationView DrawerLayout
|
|
||
בהמשך לתבניות העיצוב נלמד כיצד לייצר את הכפתור הצף האופייני כל כך לעיצוב החדש ולקבל ממנו את הפעולה. כיצד להשתמש ב snackbar הרי הוא ה toast החדש כאשר נמצאים בתוך האפליקציה וכיצד להשתמש ב coordinator layout אשר בהתאם למחלקת ה behavior הפנימית של כל אלמנט יכול להתנות הזזה של אלמנט אחד בהתאם לשני. במקרה שלנו נלמד כיצד להעלות את הכפתור הצף כאשר יופיע ה snack bar. נלמד גם כיצד לעטוף edit text באלמנט חדש אשר יכול לשמור על ה hint שלא יעלם כאשר מכניסים טקסט ובמקום הוא נשמר מעל. |
FloatingActionButton SnackBar CoordinatorLayout InputTextEditText |
|
||
בחלק האחרון בינתיים של ה Material design נלמד כיצד להוסיף תפריט של טאבים אשר יציג את כותרות ה fragments המחלפים ב viewpager בתוך הטאבים. נלמד גם על appbar layout שיכול לתאם בין התנהגות התפריט העליון לרכיבים שמתחתיו בין אם זה גלילת רשימה או כל דבר אחר. |
TabLayout AppBarLayout |
|
מודול 17 – Firebase & Material Design |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
בחלק זה נייצר אפשרות להרשמה והתחברות של משתמשים באמצעות כתובת מייל וססמה. על בסיס הקובץ הקודם נייצר אפשרות הרשמה והתחברות. כל מאגר המשתמשים ישמר בשרתי Firebase. נלמד כיצד נשמר ה session של המשתמש וכיצד לסיים אותו וכיצד להבדיל בין משתמש שהתחבר ושנרשם פעם הראשונה. |
Firebase FirebaseAuth FirebaseUser FirebaseAuthListener
|
|
||
בחלק זה של תרגיל המשימות, נייצר את אובייקט המשימה ואת ה recycler שיציג את המשימות. לצורך כך נגדיר adapter מיוחד הנקרא Mission Adapter אשר יודע להתאים בין אובייקט המשימה אל התא ב cardview בתוך ה recycler אשר יציג את המשימה. חלק זה כולל את כל התשתית של המשימות כולל הוספת עדכון ומחיקה שלהם באמצעות ממשק יעודי שמגדיר ה adapter אך עדיין המשימות לא ישמרו ב database |
|
|||
רק בחלק זה נשמור את משימות המשתמש ב Database של ה firebase זהו מסד נתונים המתעדכן בזמן אמת. כאשר נייצר טבלת משתמשים, כל משתמש ישמר תחת ה User id הייחודי שלו, וכל המשימות שלו ישמרו שם. מסד נתונים זה יהיה נגיש בהמשך גם לאפליקציות ios ו web. וכך הוא יוכל לגשת למשימות שלו ממכשירים שונים. נשמור במסד הנתונים את מחיקת המשימה ואת סיומה. |
FirebaseDatabase DatabaseReference DataSnapshot |
|
||
הוספנו לתרגיל המשימות תמונה בראש העמוד אשר מתרחבת ונעלמת בעת גלילת המשימות. זהו רכיב מאוד אופייני ל material design. |
CollapsingToolbarLayout |
|
||
בתרגיל זה ראינו אפשרויות שונות להעביר הודעות, ראשית העברנו הודעות לכל משתמשי האפליקציה באמצעות ממשק הניהול, ולאחר מכן ראינו אפשרות להעביר הודעות בתוך האפליקציה בין המשתמשים השונים באמצעות הרשמה ל topics מסוימים ושימוש בספריית volley כדי לייצר בקשות post הכוללות את גוף הnotification. יש כאן אפשרות של משתמשים לשלוח הודעות אחד לשני כדוגמת וואטסאפ. |
FirebaseMessaging FirebaseMessagingService RemoteMessage |
|
מודול 18 – Floating widgets |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
יצירת Widget צף על פני כל האפליקציות ועל מסך הבית, כדוגמת הפרצופים בצ׳ט של Facebook Messenger. ה Widget צף מעל כל האפליקציות, לא משנה היכן המשתמש נמצא ומאפשר פתיחת תפריט מהיר מכל מקום. מתאים מאוד לנגני מוזיקה הרוצים לאפשר למשתמש שליטה בכל זמן. |
WindowManager |
https://youtu.be/ |
מודול 19 – App shortcuts |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
החל מאנדרואיד 7.0 ניתן להצמיד פעולות מהירות ושימושיות לאפליקציה אשר יעלו בתפריט קופץ לאחר לחיצה ארוכה על האייקון שלה. בחלק זה נלמד כיצד להגדיר פעולות כאלו גם באופן סטטי, כלומר בעת יצירת האפליקציה וגם באופן דינמי ותוך כדי ריצת התכנית למשל לצפייה בפרק האחרון שנצפה, לחזרה למקום האחרון באפליקציה שהיית לפני הסגירה וכו׳ |
ShortcutInfo ShortcutManager |
https://youtu.be/
|
מודול 20 (בונוס) – Creating home screen widgets |
||||
שם הפרויקט |
תיאור |
מחלקות נלמדות |
קישור לווידאו |
|
יצירת Widget של פנס למסך הבית. בתרגיל זה נראה כיצד ניתן להוסיף לאפליקציה שלנו את הפונקציונלית של ה Widgets. הם מייצגים פונקציונלית מסוימת מתוך האפליקציה שלנו שאנו רוצים לאפשר למשתמש בשימוש מהיר ממסך הבית. בדוגמה נייצר widget של פנס על ידי עבודה ברמה נמוכה עם ממשק המצלמה. |
AppWidgetProvider Camera Camera.Parameters SurfaceView SurfaceHolder |
|