Intent הוא אחד מאבני הבנין החשובות של ה-Android. אני עלול לכתוב קביעות דומות גם לגבי מרכיבים אחרים, אבל בלי להגזים מדי, ה-Intent הוא ממש לב העניין.
באחד הפרקים הקודמים הגדרנו את המושג Intent כאמצעי להעברת הודעות במערכת.
השימושים להם נועד של ה-intent מגוונים:
הזכרנו קיומם של שני טיפוסי intent עיקריים: מפורש (Explicit), שבו הכתובת של פעילות היעד מצוינת במפורש כחלק מהמתודה שממשת את שליחת ההודעה, ומרומז (Implicit), שם ניתוב ההודעה ליעדה מנוהל ע"י מסנן המערכת - Intent Filter - המחליט על יעד ההודעה לפי פרמטרים המאפיינים אותה, כפי שמפורט להלן.
ה- Intent מקבל את הפרמטרים הבאים :
ה-Action חייב להיות זהה לפחות ל-Action אחד המוגדr ב Filter, אבל אם ה-Intent לא כולל אף Action, הבדיקה תעבור בהצלחה בתנאי שה- Intent Filter מכיל לפחות Action אחד.
הקטגוריה - Category- חייבת להיות זהה לפחות לקטגוריה אחת המוגדרת בפילטר, אבל אם ה- Intent לא כולל אף קטגוריה, הבדיקה תעבור בהצלחה.
הערה לגבי Implicit Intents, המערכת מתיחסת אליהם כאל שיכים לקטגורית DEFAULT, לכן ה- Filter צריך להכיל את הקטגוריה הזו, אלא אם ה-Activity כוללת Action ו - Category מסוג MAIN ו- LAUNCHER בהתאמה. במקרה זה, אין צורך בקיום קטגורית DEFAULT ב- Filter.
נראה מספר דוגמאות. הדוגמא הראשונה, קובץ המניפסט - שהוצג בפרק קודם. נציג שוב את השורות הרלוונטיות מאותו קובץ:
הקטע הנ"ל שייך להגדרת ה-Activity ששמו Hello.
שורות 4 ו-5 מכילות את האינפורמציה שתשמש את ה- Intent Filter: ה-Activity מסוג MAIN מציין
הוספתי שני פוסטים עם דוגמאות המממשות intents :
Explicit Intent
Implicit Intent
השימושים להם נועד של ה-intent מגוונים:
- אינטראקציה בין אפליקציות שונות הרצות על המערכת
- הפעלה של Activities. זהו השימוש הנפוץ, בעזרתו ניתן לקפוץ בין Activities או במילים אחרות לקפוץ בין המסכים\UI.
- הפצת הודעות Broadcast במערכת. הקליטה ונטיפול בהודעות המופצות נעשה בעזרת class מיוחד לעניין, ה-Broadcast Receiver. עם ה-Broadcast Receiver ניתן לטפל באירועים מיוחדים במערכת כמו סיום ה-Boot, שינויים בשעון, בעיות בסוללה, ואפילו טיפול ב-SMS. כל זה כאמור ע"י ה-Intents שאפשרים פעילות Event Driven. שליחת Broadcast Intents נעשית ע"י המתודה (sendBroadcast(intent . נעסוק ב-Broadcast Receiver בפרק נפרד.
הזכרנו קיומם של שני טיפוסי intent עיקריים: מפורש (Explicit), שבו הכתובת של פעילות היעד מצוינת במפורש כחלק מהמתודה שממשת את שליחת ההודעה, ומרומז (Implicit), שם ניתוב ההודעה ליעדה מנוהל ע"י מסנן המערכת - Intent Filter - המחליט על יעד ההודעה לפי פרמטרים המאפיינים אותה, כפי שמפורט להלן.
ה- Intent מקבל את הפרמטרים הבאים :
- שם הרכיב אליו ההודעה מיועדת. פרמטר זה לא חייב להיות מוגדר (ראה הגדרת Implicit Explicit כאן למעלה).
- הפעולה (Action) אותה הוא אמור לבצע. למשל:
ACTION_MAIN,
שמשמעותה, הפעל את ה-Activity בלי להעביר שום פרמטרים או לצפות לתשובה מהרכיב מקבל ההודעה - הנתונים (Data). הנתונים שב- Intent תלויים כמובן בפעולה אותו הוא אמןר לבצע. אם למשל הפעולה היא ACTION_CALL הנתונים שיצורפו יכללו את מספר הטלפון.
- ק
טגוריה. תאור סוג הרכיב שצריך לטפל ב- Intent. ערך לדוגמא, CATEGORY_LAUNCHER. בהנתן קטגוריה זו, הרכיב שמקבל את ההודעה הוא כזה שמתחיל אפליקציה.
- נתוני אקסטרה. אינפורמציה נוספת שניתן להצמיד להודעה.
ה-Action חייב להיות זהה לפחות ל-Action אחד המוגדr ב Filter, אבל אם ה-Intent לא כולל אף Action, הבדיקה תעבור בהצלחה בתנאי שה- Intent Filter מכיל לפחות Action אחד.
הקטגוריה - Category- חייבת להיות זהה לפחות לקטגוריה אחת המוגדרת בפילטר, אבל אם ה- Intent לא כולל אף קטגוריה, הבדיקה תעבור בהצלחה.
הערה לגבי Implicit Intents, המערכת מתיחסת אליהם כאל שיכים לקטגורית DEFAULT, לכן ה- Filter צריך להכיל את הקטגוריה הזו, אלא אם ה-Activity כוללת Action ו - Category מסוג MAIN ו- LAUNCHER בהתאמה. במקרה זה, אין צורך בקיום קטגורית DEFAULT ב- Filter.
נראה מספר דוגמאות. הדוגמא הראשונה, קובץ המניפסט - שהוצג בפרק קודם. נציג שוב את השורות הרלוונטיות מאותו קובץ:
- <activity android:name=".Hello"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER"
- />
- </intent-filter>
- </activity>
הקטע הנ"ל שייך להגדרת ה-Activity ששמו Hello.
שורות 4 ו-5 מכילות את האינפורמציה שתשמש את ה- Intent Filter: ה-Activity מסוג MAIN מציין
נקודת כניסה ראשית לאפליקציה. MAIN היא Activity שלא נזקק לשום פרמטרים נלווים נוספים. הקטגוריה מסוג LAUNCHER מסמנת שיש להכניס את ה-Activity לרשימה של מפעיל האפליקציות - Application Launcher, כך שבמקרה הנ"ל למשל, הפעלת האפליקציה תגרום להפעלת ה- Hello Activity.
הוספתי שני פוסטים עם דוגמאות המממשות intents :
Explicit Intent
Implicit Intent
מעולה. תודה רבה.
השבמחקממש עוזר!
השבמחק