רמת ה-API: 14
Android 4.0 (ICE_CREAM_SANDWICH
) היא גרסה מרכזית של הפלטפורמה שמוסיפה מגוון תכונות חדשות למשתמשים ולמפתחי אפליקציות. חוץ מכל התכונות וממשקי ה-API החדשים שמפורטים בהמשך, גרסת Android 4.0 היא
השקת פלטפורמה מפני שהיא מספקת את המגוון הרחב של ממשקי API ועיצובים הולוגרפיים מ-Android 3.x
למסכים קטנים יותר. מפתחי אפליקציות יכולים עכשיו להשתמש בפלטפורמה אחת ובמסגרת אחידה של ממשקי API כדי לפתח ולפרסם אפליקציות באמצעות קובץ APK אחד. קובץ ה-APK הזה מספק חוויית משתמש אופטימלית למכשירי טלפון, טאבלטים ועוד, כשהם פועלים באותה גרסת Android – Android 4.0 (רמת API 14) ואילך.
למפתחים, פלטפורמת Android 4.0 זמינה רכיב להורדה עבור Android SDK. הפלטפורמה שניתן להורדה כוללת ספרייה ותמונת מערכת של Android, וגם ערכה של סקינים למהדמרים ועוד. כדי להתחיל לפתח או לבדוק עבור Android 4.0, צריך להשתמש ב-Android SDK Manager כדי להוריד את הפלטפורמה ל-SDK.
סקירה כללית על API
בקטעים הבאים מופיעה סקירה כללית טכנית על ממשקי ה-API החדשים ב-Android 4.0.
ממשקי API של רשתות חברתיות ב'ניהול אנשי הקשר'
ממשקי ה-API ליצירת קשר שהוגדרו על ידי הספק ContactsContract
הוגדרו
הרחב כדי לתמוך בתכונות חדשות ברשתות חברתיות, כמו פרופיל אישי לבעלי המכשיר
היכולת של המשתמשים להזמין אנשי קשר ספציפיים לרשתות החברתיות שמותקנות
במכשיר.
פרופיל משתמש
Android כולל עכשיו פרופיל אישי שמייצג את בעל המכשיר, כפי שמוגדר על ידי
טבלה של ContactsContract.Profile
. אפליקציות רשתות חברתיות שמנהלות את זהות המשתמש יכולות לתרום לנתוני הפרופיל של המשתמש על ידי יצירת רשומה חדשה של ContactsContract.RawContacts
ב-ContactsContract.Profile
. כלומר, אנשי קשר גולמיים שמייצגים את המשתמש במכשיר
לא משתייכים לטבלה המסורתית של אנשי הקשר הגולמיים שהוגדרה על ידי ה-URI של ContactsContract.RawContacts
; במקום זאת, עליך להוסיף איש קשר גולמי של פרופיל
הטבלה שבכתובת CONTENT_RAW_CONTACTS_URI
. גולמי
לאחר מכן, אנשי הקשר שבטבלה זו מתווספים לפרופיל היחיד הגלוי למשתמש, בתווית 'אני'.
כדי להוסיף איש קשר גולמי חדש עבור הפרופיל, הרשאה android.Manifest.permission#WRITE_PROFILE. באופן דומה, כדי לקרוא מטבלת הפרופיל, צריך לבקש את ההרשאה android.Manifest.permission#READ_PROFILE. אבל, לפעמים רוב האפליקציות לא צריכות לקרוא את פרופיל המשתמש, גם אם הן תורמות נתונים פרופיל. קריאת פרופיל המשתמש היא הרשאה רגישת, וצריך לצפות שהמשתמשים יהיו ספקנים לגבי אפליקציות שמבקשות אותה.
הכוונה (Intent) של ההזמנה
פעולת הכוונה INVITE_CONTACT
מאפשרת לאפליקציה להפעיל פעולה שמציינת שהמשתמש רוצה להוסיף איש קשר לרשת חברתית. האפליקציה שמקבלת את הקוד משתמשת בו כדי להזמין את איש הקשר שצוין לרשת החברתית הזו. רוב האפליקציות יהיו בצד המקבל של הפעולה הזו. לדוגמה,
אפליקציית 'אנשים' המובנית מפעילה את כוונת ההזמנה כשהמשתמש בוחר באפשרות 'הוספת חיבור' להגדרה ספציפית
אפליקציה של רשת חברתית שמופיעה בפרטים ליצירת קשר של אותו אדם.
כדי שהאפליקציה תהיה גלויה כמו ב'הוספת חיבור' הרשימה, האפליקציה שלך צריכה לספק מתאם סנכרון
לסנכרן פרטים של אנשי קשר מהרשת החברתית שלך. לאחר מכן, צריך לציין למערכת שהאפליקציה שלכם מגיבה ל-Intent INVITE_CONTACT
על ידי הוספת המאפיין inviteContactActivity
לקובץ התצורה של הסנכרון של האפליקציה, עם שם מלא ומפורט של הפעילות שהמערכת צריכה להתחיל כששולחים את ה-Intent של ההזמנה.
לאחר מכן, הפעילות שתתחיל תוכל לאחזר את מזהה ה-URI של איש הקשר הרלוונטי מהנתונים של הכוונה, ולבצע את הפעולות הנדרשות כדי להזמין את איש הקשר הזה לרשת או להוסיף את המשתמש לחברים של המשתמש.
תמונות גדולות
מעכשיו יש תמיכה ב-Android בתמונות ברזולוציה גבוהה של אנשי קשר. עכשיו, כשדוחפים תמונה לתוך
רשומת איש קשר, המערכת מעבדת אותה גם לתמונה ממוזערת בגודל 96x96 (כפי שעשתה בעבר) וגם
"תמונה לתצוגה" בגודל 256x256 שמאוחסנים בחנות תמונות חדשה שמבוססת על קבצים (המידות המדויקות של
המערכת עשויה להשתנות בעתיד). ניתן להוסיף תמונה גדולה לאנשי קשר באמצעות הצבת תמונה גדולה
בעמודה PHOTO
הרגילה של
שורת נתונים, שאותה המערכת תעבד לאחר מכן לתמונה הממוזערת ולתמונה המוצגת
רשומות.
שליחת משוב על שימוש
ממשקי ה-API החדשים של ContactsContract.DataUsageFeedback
מאפשרים לכם לעקוב אחר
באיזו תדירות המשתמש משתמש בשיטות מסוימות ליצירת קשר עם אנשים, כמו למשל
כל מספר טלפון או כתובת אימייל. המידע הזה עוזר לנו לשפר את הדירוג של כל איש קשר
המשויכת לכל אדם, ומספקת הצעות טובות יותר ליצירת קשר עם כל אחד מהם.
ספק היומן
ממשקי ה-API החדשים של יומנים מאפשרים לך לקרוא, להוסיף, לשנות ולמחוק יומנים, אירועים, משתתפים, התזכורות וההתראות שנשמרות בספק היומן.
מגוון אפליקציות וווידג'טים יכולים להשתמש בממשקי ה-API האלה כדי לקרוא ולשנות אירועים ביומן. עם זאת, חלק מהתרחישים המעניינים ביותר הם מתאמי סנכרון שמסנכרנים את יומן המשתמש משירותי יומן אחרים עם ספק היומן, כדי לספק מיקום מאוחד לכל האירועים של המשתמש. לדוגמה, אירועים ביומן Google מסונכרנים עם ספק היומן באמצעות מתאם הסנכרון של יומן Google, כך שאפשר לראות את האירועים האלה באפליקציית יומן Google המובנית ל-Android.
מודל הנתונים של יומנים ומידע שקשור לאירועים בספק היומן מוגדר על ידי CalendarContract
. כל נתוני היומן של המשתמש מאוחסנים
מספר הטבלאות שהוגדרו על ידי מחלקות משנה שונות של CalendarContract
:
- בטבלה
CalendarContract.Calendars
יש נתונים ספציפיים ליומן מידע. כל שורה בטבלה הזו כוללת את הפרטים של יומן מסוים, כמו השם שלו, צבע, סנכרון מידע וכו'. - הטבלה
CalendarContract.Events
מכילה מידע ספציפי לאירוע. כל שורה בטבלה הזו מכילה את המידע של אירוע אחד, כמו כותרת האירוע, מיקום, שעת התחלה, שעת סיום וכן הלאה. האירוע יכול להתרחש פעם אחת או לחזור על עצמו כמה פעמים. המשתתפים, התזכורות והנכסים המורחבים מאוחסנים בטבלאות נפרדות להשתמש ב-_ID
של האירוע כדי לקשר אותם לאירוע. - בטבלה
CalendarContract.Instances
נשמרות שעות ההתחלה והסיום של אירועים. כל שורה בטבלה הזו מייצגת אירוע יחיד. לאירועים חד-פעמיים יש מיפוי אחד לאחד של מופעים לאירועים. באירועים חוזרים, צריך לבצע כמה שורות נוצר באופן אוטומטי בהתאם למופעים המרובים של אותו אירוע. - הטבלה
CalendarContract.Attendees
מכילה את המשתתף או האורח באירוע מידע. כל שורה מייצגת אורח אחד באירוע. מציין את סוג האורח הוא שלו, והתשובה של אותו אדם לאירוע. - הטבלה
CalendarContract.Reminders
מכילה את נתוני ההתראה/התראה. כל שורה מייצגת התראה אחת על אירוע. לכל אירוע יכולות להיות כמה תזכורות. מספר תזכורות לכל אירוע מצוינות ב-MAX_REMINDERS
, שמוגדר על ידי מתאם הסנכרון הוא הבעלים של היומן הנתון. התזכורות מסומנות מספר דקות לפני האירוע לתזמן ולקבוע שיטת התראה, למשל להשתמש בהתראה, באימייל או ב-SMS כדי להזכיר להם. למשתמש. - בטבלה
CalendarContract.ExtendedProperties
יש שדות נתונים אטומים בשימוש של מתאם הסנכרון. הספק לא מבצע פעולות כלשהן בפריטים בטבלה הזו, מלבד מחיקה שלהם כשהאירועים הקשורים אליהם נמחקים.
כדי לגשת לנתוני היומן של משתמש באמצעות ספק היומן, האפליקציה צריכה לבקש את ההרשאה READ_CALENDAR
(לגישה לקריאה) ואת ההרשאה WRITE_CALENDAR
(לגישה לכתיבה).
כוונה של משתמש באירוע
אם רוצים רק להוסיף אירוע ליומן של המשתמש, אפשר להשתמש ב-Intent ACTION_INSERT
עם הנתונים שמוגדרים על ידי Events.CONTENT_URI
כדי להתחיל
פעילות באפליקציית יומן Google שיוצרת אירועים חדשים. אין צורך בהרשאה כדי להשתמש בכוונה, ואפשר לציין את פרטי האירוע באמצעות התוספים הבאים:
Events.TITLE
: השם של אירועCalendarContract.EXTRA_EVENT_BEGIN_TIME
: שעת ההתחלה של האירוע באלפיות השנייה תקופה של זמן מערכתCalendarContract.EXTRA_EVENT_END_TIME
: אירוע שעת הסיום באלפיות השנייה מתחילת התקופהEvents.EVENT_LOCATION
: המיקום של האירועEvents.DESCRIPTION
: תיאור האירועIntent.EXTRA_EMAIL
: כתובות האימייל של האנשים האלה להזמיןEvents.RRULE
: כלל המחזור של האירועEvents.ACCESS_LEVEL
: אם האירוע הוא פרטי או ציבוריEvents.AVAILABILITY
: האם התקופה של האירוע הזה מאפשרת לתזמן אירועים אחרים באותו זמן
ספק דואר קולי
ספק הדואר הקולי החדש מאפשר לאפליקציות להוסיף הודעות קוליות של המשתמש, כדי להציג את כל ההודעות הקוליות של המשתמש במצגת ויזואלית אחת. לדוגמה, יכול להיות שלמשתמש יש כמה מקורות של הודעות קוליות, למשל אחד מספק השירות של הטלפון ומקורות אחרים מ-VoIP או משירותי קול חלופיים אחרים. האפליקציות האלה יכולות להשתמש בממשקי ה-API של ספקי הדואר הקולי כדי להוסיף את ההודעות שלהן למכשיר. לאחר מכן, כל ההודעות הקוליות יוצגו למשתמש באפליקציית 'טלפון' המובנית. למרות שאפליקציית 'טלפון' של המערכת היא האפליקציה היחידה שיכולה לקרוא את כל ההודעות הקוליות, כל אפליקציה שמספקת הודעות קוליות יכולה לקרוא את ההודעות שנוספו למערכת (אבל לא יכולה לקרוא הודעות קוליות משירותים אחרים).
בגלל שממשקי ה-API לא מאפשרים כרגע לאפליקציות של צד שלישי לקרוא את כל ההודעות הקוליות במערכת, האפליקציות היחידות של צד שלישי שבהן צריך להשתמש בממשקי ה-API של דואר קולי הן אפליקציות שיש בהן הודעות קוליות. כדי לשלוח אותו למשתמש.
המחלקה VoicemailContract
מגדירה את ספק התוכן עבור
ספק דואר קולי. מחלקות המשנה VoicemailContract.Voicemails
ו-VoicemailContract.Status
מספקות טבלאות שבהן אפליקציות יכולות
הזנת נתוני הדואר הקולי לאחסון במכשיר. לדוגמה של אפליקציה של ספק הודעות קוליות, אפשר לעיין ב
ספק הדואר הקולי
הדגמה (דמו).
מולטימדיה
ב-Android 4.0 נוספו מספר ממשקי API חדשים לאפליקציות שיוצרות אינטראקציה עם מדיה כמו תמונות, סרטונים ומוזיקה.
אפקטים של מדיה
מסגרת חדשה של אפקטים למדיה מאפשרת להוסיף מגוון אפקטים חזותיים לתמונות ולסרטונים. לדוגמה, אפקטים לתמונות מאפשרים לכם לתקן בקלות עיניים אדומות, להמיר תמונה לגווני אפור, לשנות את הבהירות, לשנות את הרוויה, לסובב תמונה, להחיל אפקט של עין הדג ועוד הרבה יותר. המערכת מבצעת את כל עיבוד האפקטים ב-GPU כדי להשיג ביצועים מרביים.
כדי לשפר את הביצועים, האפקטים חלים ישירות על מרקמי OpenGL, ולכן לאפליקציה צריך להיות הקשר OpenGL תקין כדי שתוכל להשתמש בממשקי ה-API של האפקטים. המרקמים שעליהם מחילים האפקטים יכולים להיות ממפות סיביות, מסרטונים או אפילו מהמצלמה. עם זאת, יש הגבלות מסוימות שצריך לעמוד בהן:
- הם חייבים להיות מקושרים לתמונה של טקסטורה מסוג
GL_TEXTURE_2D
- הן חייבות להכיל לפחות רמת Mipmap אחת
אובייקט Effect
מגדיר אפקט מדיה יחיד שאפשר להחיל עליו
מסגרת לתמונה. תהליך העבודה הבסיסי ליצירת Effect
הוא:
- קוראים ל-
EffectContext.createWithCurrentGlContext()
מההקשר של OpenGL ES 2.0. - משתמשים בפונקציה
EffectContext
שהוחזרה כדי להפעיל את הפונקציהEffectContext.getFactory()
, שמחזירה מופע מתוךEffectFactory
. - קוראים ל-
createEffect()
ומעבירים לה שם של אפקט מ-@link android.media.effect.EffectFactory}, כמוEFFECT_FISHEYE
אוEFFECT_VIGNETTE
.
כדי לשנות את הפרמטרים של אפקט, קוראים לפונקציה setParameter()
ומעבירים שם פרמטר וערך פרמטר. לכל סוג של אפקט יש פרמטרים שונים, שמתועדים עם שם האפקט. לדוגמה, ל-EFFECT_FISHEYE
יש פרמטר אחד עבור scale
של העיוות.
כדי להחיל אפקט על טקסטורה, יש לקרוא ל-apply()
Effect
ולהעביר את טקסטורת הקלט, את הרוחב והגובה שלו, ואת הפלט
טקסטורה. מרקם הקלט חייב להיות קשור למרקם GL_TEXTURE_2D
תמונה (בדרך כלל נעשה על ידי קריאה ל-glTexImage2D()
)
). אפשר לציין כמה רמות של מיילים ב-Mipmap. אם מרקם הפלט לא קושר
תמונת טקסטורה, היא תהיה משויכת באופן אוטומטי לאפקט GL_TEXTURE_2D
ועם רמת Mipmap אחת (0), שתהיה לה אותה
גודל כקלט.
מובטח תמיכה בכל ההשפעות שמפורטות ב-EffectFactory
.
עם זאת, חלק מהאפקטים הנוספים שזמינים בספריות חיצוניות לא נתמכים בכל המכשירים, ולכן צריך קודם לבדוק אם האפקט הרצוי מהספרייה החיצונית נתמך באמצעות קריאה ל-isEffectSupported()
.
לקוח שלט רחוק
הגרסה החדשה של RemoteControlClient
מאפשרת לנגני מדיה להפעיל הפעלה
אמצעי בקרה מלקוחות של שליטה מרחוק, כמו מסך הנעילה של המכשיר. נגני מדיה יכולים גם לחשוף
מידע על המדיה שמופעלת כרגע במסך בשלט הרחוק, כמו טראק
מידע ועטיפת אלבום.
כדי להפעיל לקוחות של שליטה מרחוק בנגן המדיה, יוצרים מופע של RemoteControlClient
באמצעות ה-constructor שלו, ומעבירים לו PendingIntent
שמקריא את ACTION_MEDIA_BUTTON
. אפליקציית Intent צריכה גם להצהיר על רכיב ה-BroadcastReceiver
המפורש באפליקציה שלכם שמטפל באירוע ACTION_MEDIA_BUTTON
.
כדי להצהיר על הקלטות של פקדי המדיה שהנגן יכול לטפל בהן, צריך להפעיל את setTransportControlFlags()
ב-RemoteControlClient
, ולהעביר קבוצה של דגלים של FLAG_KEY_MEDIA_*
, כמו FLAG_KEY_MEDIA_PREVIOUS
ו-FLAG_KEY_MEDIA_NEXT
.
לאחר מכן עליך לרשום את RemoteControlClient
על ידי העברתו אל MediaManager.registerRemoteControlClient()
.
לאחר הרישום, מקלט השידור שהצהרתם עליו כשיצרתם את RemoteControlClient
יקבל אירועי ACTION_MEDIA_BUTTON
כשמקישים על לחצן בשלט רחוק. ה-Intent שמתקבל כולל את השדה KeyEvent
של מקש המדיה שעליו לחצת, ואפשר לאחזר אותו מה-Intent באמצעות getParcelableExtra(Intent.EXTRA_KEY_EVENT)
.
כדי להציג בשלט הרחוק מידע על המדיה שמופעלת, צריך להפעיל את editMetaData()
ולהוסיף מטא-נתונים ל-RemoteControlClient.MetadataEditor
המוחזר. אתם יכולים לספק קובץ בייטמאפ לגרפיקת המדיה, מידע מספרי כמו משך הזמן שחלף ומידע טקסטואלי כמו שם הטראק. מידע על המפתחות הזמינים זמין בדגלים METADATA_KEY_*
בקובץ MediaMetadataRetriever
.
להטמעה לדוגמה, אפשר לעיין בנגן מוזיקה אקראי, מספקת לוגיקת תאימות שמאפשרת להפעיל את לקוח השלט הרחוק ב-Android 4.0 ובמקביל להמשיך לתמוך במכשירים בחזרה ל-Android 2.1.
נגן מדיה
- מעכשיו, כדי לשדר מדיה בסטרימינג אונליין מ-
MediaPlayer
, נדרשת ההרשאהINTERNET
. אם משתמשים ב-MediaPlayer
כדי להפעיל תוכן מהאינטרנט, הקפידו להוסיף אתINTERNET
הרשאה למניפסט שלך, אחרת הפעלת המדיה לא תפעל החל מ-Android 4.0. setSurface()
מאפשר להגדירSurface
שיתנהג בהתאם ל-sink הסרטון.setDataSource()
מאפשר לך לשלוח כותרות HTTP נוספות יחד עם הבקשה, שיכולות להיות שימושיות לסטרימינג בשידור חי מסוג HTTP(S)- סטרימינג בשידור חי ב-HTTP(S) מתייחס עכשיו לקובצי cookie של HTTP בכל הבקשות
סוגי המדיה
ב-Android 4.0 נוספת תמיכה בתכונות הבאות:
- גרסה 3 של פרוטוקול סטרימינג בשידור חי ב-HTTP/HTTPS
- קידוד אודיו של AAC גולמי של ADTS
- תמונות WEBP
- סרטון Matroska
מידע נוסף זמין במדיה נתמכת פורמטים.
מצלמה
בכיתה Camera
יש עכשיו ממשקי API לזיהוי פנים ולבקרה
תחומי מיקוד ומדידה.
איתור פנים
אפליקציות המצלמה יכולות עכשיו לשפר את היכולות שלהן בעזרת ממשקי ה-API של זיהוי פנים ב-Android, ניתן לזהות רק את הפנים של נושא מסוים, אלא גם את תווי הפנים הספציפיים, כמו העיניים והפה.
כדי לזהות פנים באפליקציית המצלמה, עליך לרשום Camera.FaceDetectionListener
בהתקשרות אל setFaceDetectionListener()
. לאחר מכן תוכלו להתחיל להשתמש במשטח המצלמה ולזהות פנים על ידי השמעת הפקודה startFaceDetection()
.
כשהמערכת מזהה פנים של אדם אחד או יותר בסצנת המצלמה, היא מבצעת קריאה חוזרת (callback) של onFaceDetection()
ב
של Camera.FaceDetectionListener
, כולל מערך
Camera.Face
אובייקטים.
מופע של הכיתה Camera.Face
מספק מידע שונה על הפנים שזוהו, כולל:
Rect
שמציין את גבולות הפנים, ביחס לגבולות של המצלמה שדה הראייה הנוכחי- מספר שלם בין 1 ל-100 שמציין את מידת הביטחון של המערכת בכך שהאובייקט פנים אנושיות
- מזהה ייחודי כדי שתוכלו לעקוב אחרי כמה פנים
- מספר אובייקטים מסוג
Point
שמציינים את מיקום העיניים והפה נמצא
הערה: יכול להיות שאין תמיכה בזיהוי פנים במכשירים מסוימים, לכן צריך לבדוק זאת על ידי קריאה ל-getMaxNumDetectedFaces()
ולוודא שהערך המוחזר גדול מאפס. בנוסף, מכשירים מסוימים לא תומכים בזיהוי העיניים והפה,
במקרה כזה, השדות האלה באובייקט Camera.Face
יהיו ריקים.
אזורי מיקוד ומדידה
אפליקציות המצלמה יכולות עכשיו לשלוט באזורים שבהם המצלמה משתמשת לצורך מיקוד ומדידת לבן
יתרה
ולחשיפה אוטומטית. בשתי התכונות האלה נעשה שימוש בכיתה החדשה Camera.Area
כדי לציין את האזור בתצוגה הנוכחית של המצלמה שצריך להתמקד בו או למדוד בו את התאורה. מופע של הכיתה Camera.Area
מגדיר את גבולות האזור באמצעות Rect
ואת המשקל של האזור – שמייצג את רמת החשיבות של האזור הזה ביחס לאזורים אחרים שנלקחים בחשבון – באמצעות מספר שלם.
לפני שמגדירים אזור התמקדות או אזור מדידה, צריך קודם להפעיל את הפונקציה getMaxNumFocusAreas()
או getMaxNumMeteringAreas()
, בהתאמה. אם הערכים האלה מוחזרים כאפס, אז
המכשיר לא תומך בתכונה המתאימה.
כדי לציין את אזורי המיקוד או המדידה שבהם רוצים להשתמש, פשוט קוראים לפונקציה setFocusAreas()
או setMeteringAreas()
. כל אחד מהם לוקח List
מתוך Camera.Area
אובייקטים שמציינים את האזורים שצריך לקחת בחשבון
למיקוד או למדידת ביצועים. לדוגמה, אפשר להטמיע תכונה שמאפשרת למשתמש להגדיר את אזור המיקוד על ידי מגע באזור בתצוגה המקדימה, ולאחר מכן לתרגם אותו לאובייקט Camera.Area
ולבקש מהמצלמה להתמקד באזור הזה בסצנה.
המיקוד או החשיפה באזור הזה יתעדכנו באופן קבוע ככל שהסצנה באזור תשתנה.
מיקוד אוטומטי רציף לתמונות
עכשיו אפשר להפעיל מיקוד אוטומטי רציף (CAF) בזמן צילום תמונות. כדי להפעיל CAF ב-
אפליקציית מצלמה, העברת FOCUS_MODE_CONTINUOUS_PICTURE
אל setFocusMode()
. כשרוצים לצלם תמונה, מקישים על autoFocus()
. ה-Camera.AutoFocusCallback
מקבל קריאה חוזרת באופן מיידי כדי לציין אם המערכת הצליחה להתמקד. כדי להמשיך את ה-CAF אחרי קבלת השיחה החוזרת, צריך להתקשר למספר cancelAutoFocus()
.
הערה: יש תמיכה גם בפוקוס אוטומטי רציף בזמן צילום
בסרטון באמצעות FOCUS_MODE_CONTINUOUS_VIDEO
,
נוספה ברמת API 9.
תכונות אחרות של המצלמה
- בזמן צילום וידאו, אפשר עכשיו להתקשר למספר
takePicture()
כדי לשמור תמונה בלי להפסיק את סשן הווידאו. לפני כן, צריך להתקשר למספרisVideoSnapshotSupported()
כדי לוודא שהחומרה תומכת בכך. - עכשיו אפשר לנעול חשיפה אוטומטית ואיזון לבן באמצעות
setAutoExposureLock()
ו-setAutoWhiteBalanceLock()
כדי למנוע כדי למנוע שינויים במאפיינים האלה. - עכשיו אפשר להתקשר אל
setDisplayOrientation()
בזמן שהתצוגה המקדימה של המצלמה פועלת. בעבר, אפשר היה לבצע את הפעולה הזו רק לפני תחילת התצוגה המקדימה, אבל עכשיו אפשר לשנות את הכיוון בכל שלב.
כוונות שידור מהמצלמה
Camera.ACTION_NEW_PICTURE
: המשמעות של האירוע הזה היא שהמשתמש צילם תמונה חדשה. אפליקציית המצלמה המובנית מפעילה את השידור הזה אחרי צילום תמונה, ואפליקציות מצלמה של צד שלישי אמורות גם הן לשדר את הכוונה הזו אחרי צילום תמונה.Camera.ACTION_NEW_VIDEO
: סימן שהמשתמש צילם סרטון חדש. אפליקציית המצלמה המובנית מפעילה את השידור הזה אחרי צילום סרטון, ואפליקציות מצלמה של צד שלישי אמורות גם הן לשדר את הכוונה הזו אחרי צילום סרטון.
Android Beam (NDEF Push with NFC)
Android Beam היא תכונת NFC חדשה שמאפשרת לשלוח הודעות NDEF ממכשיר אחד אל אחר (תהליך שנקרא גם "דחיפת NDEF"). העברת הנתונים מתחילה כאשר מכשירים מבוססי Android שתומכים ב-Android Beam נמצאים בסמוך (כ-4 ס"מ), בדרך כלל עם הגבים שלהם נוגעים. הנתונים שבהודעת ה-NDEF יכולים להכיל כל נתון שרוצים לשתף בין מכשירים. לדוגמה, אפליקציית 'אנשים' משתפת אנשי קשר, משתפת סרטונים ומנהלת את הדפדפן ב-YouTube משתף כתובות URL באמצעות Android Beam.
כדי להעביר נתונים בין מכשירים באמצעות Android Beam, עליך ליצור NdefMessage
שמכיל את המידע שברצונך לשתף בזמן שהפעילות מתבצעת
את החזית. לאחר מכן צריך להעביר את NdefMessage
למערכת באחד מתוך שניים
דרכים:
- הגדרת
NdefMessage
יחיד לדחיפה בזמן הפעילות:אפשר להתקשר למספר
setNdefPushMessage()
בכל שלב כדי להגדיר את ההודעה שרוצים לשלוח. לדוגמה, אפשר לקרוא לשיטה הזו ולהעביר לה אתNdefMessage
במהלךonCreate()
של הפעילות . לאחר מכן, בכל פעם ש-Android Beam מופעל במכשיר אחר בזמן שהפעילות בחזית, המערכת שולחת אתNdefMessage
למכשיר השני. - הגדרת ה-
NdefMessage
לדחיפה בזמן הפעלת Android Beam:מטמיעים את
NfcAdapter.CreateNdefMessageCallback
, שבה ההטמעה של השיטהcreateNdefMessage()
מחזירה את ה-NdefMessage
שרוצים לשלוח. לאחר מכן מעבירים את ההטמעה שלNfcAdapter.CreateNdefMessageCallback
אלsetNdefPushMessageCallback()
.במקרה כזה, כש-Android Beam מופעל עם מכשיר אחר בזמן שהפעילות שלכם בחזית, המערכת קוראת ל-
createNdefMessage()
כדי לאחזר את ה-NdefMessage
שרוצים לשלוח. כך תוכלו להגדיר אתNdefMessage
כך שיישלח רק פעם אחת כשהפעלת Android Beam תתחיל, למקרה שתוכן ההודעה ישתנה במהלך הפעילות.
אם אתם רוצים להריץ קוד ספציפי אחרי שהמערכת תצליח להעביר את הודעת ה-NDEF למכשיר השני, תוכלו להטמיע את NfcAdapter.OnNdefPushCompleteCallback
ולהגדיר אותו באמצעות setNdefPushCompleteCallback()
. המערכת
לאחר מכן יש להתקשר למספר onNdefPushComplete()
כשההודעה תימסר.
במכשיר המקבל, המערכת שולחת הודעות NDEF בדחיפה באופן דומה להודעות NFC רגילות.
התגים. המערכת מפעילה כוונה עם הפעולה ACTION_NDEF_DISCOVERED
כדי להתחיל פעילות, עם כתובת URL או סוג MIME שהוגדרו בהתאם ל-NdefRecord
הראשון ב-NdefMessage
. לגבי הפעילות שאתם רוצים
יש לך אפשרות להצהיר על מסנני Intent של כתובות ה-URL או סוגי MIME שחשובים לאפליקציה. לקבלת מידע נוסף
מידע על Tag Dispatch זמין במדריך למפתחים של NFC.
אם רוצים שה-NdefMessage
יכלול URI, אפשר עכשיו להשתמש במאפיין הנוחות
השיטה createUri
כדי ליצור NdefRecord
חדש על סמך מחרוזת או אובייקט Uri
. אם ה-URI הוא בפורמט מיוחד שאתם רוצים שהאפליקציה תקבל גם במהלך אירוע Android Beam, עליכם ליצור מסנן כוונה לפעילות שלכם באמצעות אותו סכימה של URI כדי לקבל את הודעת ה-NDEF הנכנסת.
עליך גם להעביר 'רשומה של אפליקציה ל-Android' עם NdefMessage
ב-
כדי להבטיח שהאפליקציה תטפל בהודעת ה-NDEF הנכנסת, גם אם היא
מסננים של אפליקציות לאותה פעולת Intent. אפשר ליצור רשומה של אפליקציה ל-Android באמצעות
התקשרות אל createApplicationRecord()
, העברה
שם החבילה של האפליקציה. כשהמכשיר השני מקבל את הודעת ה-NDEF עם רשומת האפליקציה, וכמה אפליקציות מכילות פעילויות שמטפלות בכוונה שצוינה, המערכת תמיד מעבירה את ההודעה לפעילות באפליקציה שלכם (על סמך רשומת האפליקציה התואמת). אם האפליקציה לא מותקנת כרגע במכשיר היעד, המערכת משתמשת ברשומת האפליקציה ל-Android כדי להפעיל את Google Play ולהעביר את המשתמש לאפליקציה כדי להתקין אותה.
אם האפליקציה שלך לא משתמשת בממשקי API של NFC כדי לבצע העברת הודעות NDEF Push, Android מספק התנהגות ברירת המחדל: כשהאפליקציה פועלת בחזית במכשיר אחד ו-Android Beam מופעל באמצעות מכשיר אחר המבוסס על Android, והמכשיר השני מקבל הודעת NDEF עם רשומה של אפליקציית Android שמזהה את האפליקציה שלכם. אם במכשיר המקבל יש את מותקנת, המערכת מפעילה אותו; אם האפליקציה לא מותקנת, אפליקציית Google Play נפתחת ומצלמת המשתמש הרלוונטי באפליקציה כדי להתקין אותה.
מידע נוסף על Android Beam ועל תכונות NFC אחרות זמין במדריך למפתחים בנושא יסודות NFC. למשל, קוד לדוגמה. באמצעות Android Beam, ראה Android העברת הדגמה (דמו).
Wi-Fi P2P
Android תומך עכשיו בחיבורי Wi-Fi מקצה לקצה (P2P) בין מכשירים מבוססי Android לבין סוגים אחרים של מכשירים (בהתאם ל-Wi-Fi DirectTM של Wi-Fi Alliance תוכנית הסמכה) ללא נקודה לשיתוף אינטרנט (Hotspot) או חיבור לאינטרנט. מסגרת Android מספקת קבוצה של ממשקי API של Wi-Fi P2P שמאפשרים לכם לגלות מכשירים אחרים ולהתחבר אליהם כשכל מכשיר תומך ב-Wi-Fi P2P, ואז לתקשר דרך חיבור מהיר למרחקים ארוכים בהרבה מאשר חיבור Bluetooth.
חבילת android.net.wifi.p2p
החדשה מכילה את כל ממשקי ה-API לביצוע חיבורים peer-to-peer באמצעות Wi-Fi. הכיתה העיקרית שאיתה צריך לעבוד היא WifiP2pManager
. אפשר לרכוש אותה בהתקשרות אל getSystemService(WIFI_P2P_SERVICE)
. WifiP2pManager
כולל ממשקי API שמאפשרים לכם:
- לאתחל את האפליקציה לחיבורי P2P על ידי התקשרות אל
initialize()
- רוצה למצוא מכשירים בקרבת מקום? ניתן להתקשר אל
discoverPeers()
- כדי להתחיל חיבור P2P, צריך להתקשר אל
connect()
- ועוד
נדרשים גם כמה ממשקים וכיתות נוספים, כמו:
- הממשק
WifiP2pManager.ActionListener
מאפשר לקבל קריאות חזרה (callbacks) כשפעולה כמו גילוי עמיתים או חיבור אליהם מסתיימת בהצלחה או נכשלת. - הממשק של
WifiP2pManager.PeerListListener
מאפשר לך לקבל מידע על אפליקציות להשוואה שנמצאו. הקריאה החוזרת (callback) מספקתWifiP2pDeviceList
, שבאמצעותו אפשר לאחזר אובייקטWifiP2pDevice
לכל מכשיר שנמצא בטווח, ולקבל מידע כמו שם המכשיר, הכתובת, סוג המכשיר, הגדרות ה-WPS שבהן המכשיר תומך ועוד. - הממשק של
WifiP2pManager.GroupInfoListener
מאפשר לכם לקבל מידע על קבוצת P2P. פונקציית ה-callback מספקת אובייקטWifiP2pGroup
, שמספק מידע על הקבוצה, כמו הבעלים, שם הרשת והביטוי המוצפן. - הממשק
WifiP2pManager.ConnectionInfoListener
מאפשר לקבל מידע על החיבור הנוכחי. פונקציית ה-callback מספקת אובייקטWifiP2pInfo
, שמכיל מידע כמו אם הקבוצה נוצרה ומי הבעלים שלה.
כדי להשתמש בממשקי ה-API של Wi-Fi P2P, האפליקציה שלך צריכה לבקש את הרשאות המשתמש הבאות:
ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
INTERNET
(למרות שהאפליקציה שלך לא מתחברת מבחינה טכנית לאינטרנט, תקשורת עם עמיתים ב-Wi-Fi P2P שיש להם שקעי Java רגילים מחייבת חיבור לאינטרנט ).
מערכת Android משדרת גם כמה פעולות שונות במהלך אירועי Wi-Fi P2P מסוימים:
WIFI_P2P_CONNECTION_CHANGED_ACTION
: סטטוס החיבור בשיתוף מקצה לקצה השתנה. הסיסמה הזו כוללת אתEXTRA_WIFI_P2P_INFO
עם אובייקטWifiP2pInfo
ואתEXTRA_NETWORK_INFO
עםNetworkInfo
לאובייקט.WIFI_P2P_STATE_CHANGED_ACTION
: מצב ה-P2P השתנה ממופעל למושבת. הוא נושא אתEXTRA_WIFI_STATE
עםWIFI_P2P_STATE_DISABLED
אוWIFI_P2P_STATE_ENABLED
WIFI_P2P_PEERS_CHANGED_ACTION
: רשימת האפליקציות להשוואה המכשירים השתנו.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: הפרטים של המכשיר הזה השתנה.
מידע נוסף זמין במסמכי התיעוד של WifiP2pManager
. כדאי גם לעיין באפליקציה לדוגמה Wi-Fi P2P Demo.
מכשירי Bluetooth Health
ב-Android יש עכשיו תמיכה במכשירים עם 'פרופיל בריאות ב-Bluetooth', כך שאפשר ליצור אפליקציות שמשתמשות Bluetooth לתקשורת עם מכשירי בריאות שתומכים ב-Bluetooth, כמו מוניטורים של דופק, מדי דם, מדי חום וסולמות.
בדומה לאוזניות רגילות ולמכשירים עם פרופיל A2DP, כדי ליצור חיבור לפרופיל צריך להפעיל את getProfileProxy()
עם BluetoothProfile.ServiceListener
ועם סוג הפרופיל HEALTH
אובייקט proxy.
אחרי שרוכשים את שרת ה-Proxy של פרופיל הבריאות (BluetoothHealth
), כשמתחברים למכשירי בריאות מותאמים ומתקשרים איתם, יש את הכלים הבאים
סיווגי Bluetooth:
BluetoothHealthCallback
: צריך להרחיב את הכיתה הזו ולהטמיע את שיטות ה-callback כדי לקבל עדכונים על שינויים במצב הרישום של האפליקציה ובמצב של ערוץ ה-Bluetooth.BluetoothHealthAppConfiguration
: במהלך קריאות חוזרות אלBluetoothHealthCallback
, יתקבל מופע של האובייקט הזה מספקת פרטי תצורה על המכשיר הזמין של תקינות ה-Bluetooth, שבו צריך להשתמש כדי לבצע פעולות שונות כמו ליזום ולסיים חיבורים עם ממשקי ה-API שלBluetoothHealth
.
מידע נוסף על השימוש בפרופיל Health ב-Bluetooth זמין במסמכים של BluetoothHealth
.
נגישות
מערכת Android 4.0 משפרת את הנגישות למשתמשים ליקויי ראייה באמצעות מצב חדש של 'גילוי באמצעות מגע' וממשקי API מורחבים שמאפשרים לספק מידע נוסף על תוכן של צפיות לפתח שירותי נגישות מתקדמים.
מצב 'גילוי באמצעות מגע'
משתמשים עם לקות ראייה יכולים עכשיו לבחון את המסך על ידי מגע וגרירה של אצבע על המסך, כדי לשמוע תיאורים קוליים של התוכן. כי מצב 'גילוי אחר מגע' פועל כמו
סמן וירטואלי, הוא מאפשר לקוראי מסך לזהות את הטקסט התיאורי באותו אופן שבו
לקוראים יכולים לעשות זאת כשהמשתמש מנווט באמצעות מקשי החיצים (d-pad או כדור עקיבה) על ידי קריאת המידע שסופק
על ידי android:contentDescription
ועל setContentDescription()
במהלך סימולציה של 'מעבר מעל עכבר' אירוע. אז,
זאת תזכורת לכך שצריך לספק טקסט תיאורי עבור התצוגות
במיוחד לאפליקציות ImageButton
, EditText
,
ImageView
ווידג'טים אחרים שעשויים לא לכלול באופן טבעי תיאורים
טקסט.
נגישות לתצוגות
כדי לשפר את המידע שזמין לשירותי נגישות כמו קוראי מסך, אפשר להטמיע שיטות חזרה (callbacks) חדשות לאירועי נגישות ברכיבי View
בהתאמה אישית.
חשוב לזכור קודם כל שההתנהגות של השיטה sendAccessibilityEvent()
השתנתה ב-Android
4.0. בדומה לגרסאות קודמות של Android, כשהמשתמש מפעיל את שירותי הנגישות במכשיר ומתרחש אירוע קלט כמו קליק או מעקב עכבר, התצוגה המתאימה מקבלת הודעה באמצעות קריאה ל-sendAccessibilityEvent()
. בעבר, ההטמעה של sendAccessibilityEvent()
הייתה מפעילה AccessibilityEvent
ושולחת אותו אל AccessibilityManager
. ההתנהגות החדשה כוללת כמה שיטות קריאה חוזרת (callbacks) נוספות שמאפשרות לתצוגה ולרכיבי ההורה שלה להוסיף לאירוע מידע נוסף על ההקשר:
- בהפעלה, השיטות
sendAccessibilityEvent()
ו-sendAccessibilityEventUnchecked()
דוחות דחייה אלonInitializeAccessibilityEvent()
.ייתכן שהטמעות מותאמות אישית של
View
יטמיעו אתonInitializeAccessibilityEvent()
לצרף מידע נוסף על נגישות ל-AccessibilityEvent
, אבל צריך גם לבצע קריאה להטמעה של: לספק פרטי ברירת מחדל, כמו תיאור התוכן הרגיל, אינדקס הפריטים ועוד. אבל לא כדאי להוסיף תוכן טקסט נוסף בקריאה החוזרת (callback) – זה קורה הבא. - אחרי האתחול, אם האירוע הוא אחד מכמה סוגים שצריך לאכלס בטקסט
מידע, התצוגה תקבל קריאה אל
dispatchPopulateAccessibilityEvent()
, נוטרת ל-onPopulateAccessibilityEvent()
קריאה חוזרת.בדרך כלל, בהטמעות בהתאמה אישית של
View
צריך להטמיע אתonPopulateAccessibilityEvent()
כדי להוסיף תוכן טקסט נוסף ל-AccessibilityEvent
אם הטקסט שלandroid:contentDescription
חסר או לא מספיק. כדי להוסיף עוד טקסט תיאורAccessibilityEvent
, שיחה אלgetText()
.add()
. - בשלב הזה, ה-
View
מעביר את האירוע למעלה בהיררכיית התצוגות באמצעות קריאה לפעולהrequestSendAccessibilityEvent()
ב- תצוגה ראשית. לכל תצוגת הורה יש הזדמנות לשפר את נתוני הנגישות על ידי הוספה שלAccessibilityRecord
, עד הוא מגיע בסופו של דבר לתצוגת הבסיס, ששולח את האירוע אלAccessibilityManager
עםsendAccessibilityEvent()
.
בנוסף לשיטות החדשות שלמעלה, שהן שימושיות כשמרחיבים את המחלקה View
, אפשר גם ליירט את הקריאות החוזרות של האירועים האלה בכל View
. לשם כך, מרחיבים את AccessibilityDelegate
ומגדירים אותו בתצוגה באמצעות
setAccessibilityDelegate()
לאחר מכן, כל שיטת נגישות בתצוגה דוחה את הקריאה לשיטה המתאימה
בעל הגישה. לדוגמה, כשהתצוגה מקבלת קריאה ל-onPopulateAccessibilityEvent()
, היא מעבירה אותה לאותה שיטה ב-View.AccessibilityDelegate
. שיטות שלא מטופלות על ידי
משתמש עם הרשאה יקבל חזרה לתצוגה את התנהגות ברירת המחדל. כך תוכלו לשנות רק את השיטות הנחוצות לכל תצוגה נתונה, בלי להרחיב את הכיתה View
.
אם אתם רוצים לשמור על תאימות לגרסאות Android שקדמו ל-4.0, תוך תמיכה בממשקי ה-API החדשים לנגישות, תוכלו לעשות זאת באמצעות הגרסה האחרונה של ספריית התמיכה בגרסה 4 (ב-חבילת התאימות, r4) באמצעות קבוצה של כיתות שירות שמספקות את ממשקי ה-API החדשים לנגישות בתכנון תואם לאחור.
שירותי נגישות
אם מפתחים שירות נגישות, המידע על אירועי נגישות שונים הורחב באופן משמעותי כדי לאפשר משוב מתקדם יותר בנושא נגישות עבור משתמשים. במיוחד, האירועים נוצרים על סמך הרכב התצוגה, ומספקים מידע טוב יותר על ההקשר ומאפשרים לשירותי הנגישות לעבור בהיררכיות התצוגה כדי לקבל מידע נוסף על התצוגה ולטפל במקרים מיוחדים.
אם אתם מפתחים שירות נגישות (כמו קורא מסך), תוכלו לגשת למידע נוסף על התוכן ולעבור בהיררכיות התצוגה באמצעות התהליך הבא:
- עם קבלת
AccessibilityEvent
מאפליקציה, קוראים ל-AccessibilityEvent.getRecord()
כדי לאחזרAccessibilityRecord
ספציפי (ייתכן שצורפו כמה רשומות אירוע). - מ-
AccessibilityEvent
או מ-AccessibilityRecord
ספציפי, אפשר לקרוא ל-getSource()
כדי לאחזר אובייקטAccessibilityNodeInfo
.הערך
AccessibilityNodeInfo
מייצג צומת יחיד של תוכן החלון בפורמט שמאפשר להריץ שאילתות לגבי מידע על הנגישות של הצומת הזה. האובייקטAccessibilityNodeInfo
שהוחזר מ-AccessibilityEvent
מתאר את מקור האירוע, ואילו המקור מ-AccessibilityRecord
מתאר את האירוע שקדם לאירוע מקור. - באמצעות
AccessibilityNodeInfo
, אפשר לשלוח שאילתות לגבי המידע שלו, להפעיל אתgetParent()
אוgetChild()
כדי לעבור את היררכיית התצוגה, ואפילו להוסיף לצומת תצוגות צאצא.
כדי שהאפליקציה שלך תפרסם את עצמה במערכת בתור שירות נגישות, היא
חייבת להצהיר על קובץ תצורה של XML שתואם ל-AccessibilityServiceInfo
. כדי לקבל מידע נוסף על יצירת
מידע על תצורת ה-XML מופיע במאמרים AccessibilityService
ו-SERVICE_META_DATA
.
ממשקי API אחרים לנגישות
אם מעניין אותך את מצב הנגישות של המכשיר, יש ב-AccessibilityManager
כמה ממשקי API חדשים, כמו:
AccessibilityManager.AccessibilityStateChangeListener
הוא ממשק שמאפשר לך לקבל התקשרות חזרה כאשר הנגישות מופעלת או מושבת.- אפליקציית
getEnabledAccessibilityServiceList()
מספקת מידע על שירותי הנגישות. מופעלות כרגע. isTouchExplorationEnabled()
אומרת אם מצב 'גילוי באמצעות מגע' מופעל.
שירותי בדיקת איות
מסגרת חדשה לבדיקת איות מאפשרת לאפליקציות ליצור כלי בדיקת איות באופן דומה למסגרת של שיטות הקלט (ל-IME). כדי ליצור בדיקת איות חדשה, צריך להטמיע שירות
נמשך
SpellCheckerService
ולהרחיב את הכיתה SpellCheckerService.Session
כדי לספק הצעות איות על סמך
בטקסט שמסופק על ידי שיטות הקריאה החוזרת (callback) של הממשק. ב-methods של הקריאה החוזרת (callback) ב-SpellCheckerService.Session
, צריך להחזיר את
הצעות איות כאובייקטים SuggestionsInfo
.
אפליקציות עם שירות של בדיקת איות חייבות להצהיר על ההרשאה BIND_TEXT_SERVICE
כנדרש על ידי השירות.
השירות צריך גם להצהיר על מסנן כוונה עם <action
android:name="android.service.textservice.SpellCheckerService" />
כפעולת הכוונה, ולכלול רכיב <meta-data>
שמצהיר על פרטי ההגדרה של בדיקת האיות.
ראה דוגמה האפליקציה 'שירות בדיקת איות' דוגמה אפליקציית לקוח לבדיקת איות, למשל קוד.
מנועים להמרת טקסט לדיבור (TTS)
הרחבנו באופן משמעותי את ממשקי ה-API של Android להמרת טקסט לדיבור (TTS), כדי לאפשר לאפליקציות להטמיע מנועי TTS מותאמים אישית בקלות רבה יותר. בנוסף, לאפליקציות שרוצות להשתמש במנוע TTS יש כמה ממשקי API חדשים לבחירת מנוע.
שימוש במנועי המרת טקסט לדיבור (TTS)
בגרסאות קודמות של Android, היה אפשר להשתמש במחלקה TextToSpeech
כדי לבצע פעולות של המרת טקסט לדיבור (TTS) באמצעות מנוע ה-TTS שסופק על ידי המערכת, או כדי להגדיר
מנוע מותאם אישית באמצעות setEngineByPackageName()
. ב-Android 4.0, השיטה setEngineByPackageName()
כבר
הוצא משימוש ועכשיו אפשר להגדיר את המנוע לשימוש עם constructor חדש של TextToSpeech
שמקבל את שם החבילה של מנוע TTS.
אפשר גם לשלוח שאילתות על מנועי ה-TTS הזמינים באמצעות getEngines()
. השיטה הזו מחזירה רשימה של TextToSpeech.EngineInfo
אובייקטים, כולל מטא-נתונים כמו
סמל, תווית ושם חבילה.
יצירת מנועים להמרת טקסט לדיבור (TTS)
בעבר, מנועים בהתאמה אישית דרשו לבנות את המנוע באמצעות כותרת מקורית לא מתועדת חדש. ב-Android 4.0 יש קבוצה מלאה של ממשקי API של מסגרות ליצירת מנועי TTS.
ההגדרה הבסיסית מחייבת הטמעה של TextToSpeechService
שתגיב לכוונה INTENT_ACTION_TTS_SERVICE
.
העבודה הראשית במנוע TTS מתרחשת במהלך הקריאה החוזרת של onSynthesizeText()
בשירות
שאורכו TextToSpeechService
. המערכת מעבירה לשיטה הזו שני אובייקטים:
SynthesisRequest
: השדה הזה מכיל נתונים שונים, כולל הטקסט שרוצים לסנתז, האזור, קצב הדיבור וטון הקול.SynthesisCallback
: זהו הממשק שבו מנוע ה-TTS מעביר את נתוני הדיבור שנוצרו כסטרימינג של אודיו. קודם כל המנוע צריך לקרוא ל-start()
כדי לציין שהמנוע מוכן לספק את האודיו, ואז קוראים ל-audioAvailable()
, ומעבירים אליו את נתוני האודיו במאגר נתונים זמני של בייטים. אחרי שהמנוע מעביר את כל האודיו דרך מאגר נתונים זמני, צריך לבצע קריאה אלdone()
.
עכשיו, כשה-framework תומך ב-API אמיתי ליצירת מנועי TTS, יש תמיכה בקוד המקורי הוסרה. תחפשו פוסט בבלוג על שכבת תאימות. שאפשר להשתמש בו כדי להמיר את מנועי ה-TTS הישנים למסגרת החדשה.
לדוגמה, למנוע TTS שמשתמש בממשקי ה-API החדשים, באפליקציה לדוגמה Text to Speech Engine.
שימוש ברשת
מערכת Android 4.0 מאפשרת למשתמשים לראות בדיוק כמה נתוני רשת משתמשים באפליקציות שלהם. אפליקציית ההגדרות מספקת אמצעי בקרה שמאפשרים למשתמשים לנהל מגבלות שהוגדרו לשימוש בנתונים ברשת אפילו להשבית את השימוש בנתוני רקע עבור אפליקציות מסוימות. כדי למנוע ממשתמשים להשבית את את הגישה של האפליקציה לנתונים מהרקע, צריך לפתח אסטרטגיות לשימוש בנתונים בחיבור יעיל ולשנות את השימוש בהתאם לסוג החיבור הזמין.
אם האפליקציה שלכם מבצעת הרבה עסקאות ברשת, צריך לספק הגדרות משתמש
לאפשר למשתמשים לשלוט בהרגלי הנתונים של האפליקציה, למשל באיזו תדירות האפליקציה מסנכרנת נתונים,
לבצע העלאות/הורדות רק כאשר המכשיר מחובר לרשת Wi-Fi, האם להשתמש בנתונים בזמן נדידה וכו'.
אמצעי הבקרה שזמינים להם, יש סבירות נמוכה יותר שהמשתמשים ישביתו את הגישה של האפליקציה שלכם לנתונים
הם מתקרבים למגבלות שלהם, כי במקום זאת הם יכולים לשלוט במדויק בכמות הנתונים שהאפליקציה שלכם משתמשת בהם.
אם אתה מציין פעילות של העדפה עם ההגדרות האלה, עליך לכלול אותה במניפסט שלה.
הצהרה על מסנן Intent עבור ACTION_MANAGE_NETWORK_USAGE
פעולה. לדוגמה:
<activity android:name="DataPreferences" android:label="@string/title_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
מסנן Intent הזה מציין למערכת שזו הפעילות ששולטת לשימוש של האפליקציה בנתונים. לכן, כשהמשתמש בודק את כמות הנתונים שבהם האפליקציה שלכם משתמשת באפליקציית ההגדרות, מופיע הלחצן 'הצגת הגדרות האפליקציה', שמפעיל את פעילות ההעדפות שלכם כדי שהמשתמש יוכל לשנות את כמות הנתונים שבהם האפליקציה משתמשת.
חשוב לזכור ש-getBackgroundDataSetting()
הוצאה משימוש ותמיד מחזירה את הערך true. במקום זאת, צריך להשתמש ב-getActiveNetworkInfo()
. לפני שמנסים לבצע עסקאות ברשת, תמיד צריך להפעיל את getActiveNetworkInfo()
כדי לקבל את הערך של NetworkInfo
שמייצג את הרשת הנוכחית, ולבצע שאילתה ל-isConnected()
כדי לבדוק אם יש למכשיר חיבור. לאחר מכן אפשר לבדוק מאפייני חיבור אחרים, למשל אם המכשיר
בנדידה או בחיבור לרשת Wi-Fi.
Enterprise
מערכת Android 4.0 מרחיבה את היכולות של אפליקציות ארגוניות באמצעות התכונות הבאות.
שירותי VPN
הגרסה החדשה של VpnService
מאפשרת לאפליקציות ליצור VPN משלהן (וירטואלי
רשת פרטית), פועלת בתור Service
. שירות VPN יוצר ממשק לרשת וירטואלית עם כתובת וכללי ניתוב משלו, ומבצע את כל הקריאה והכתיבה באמצעות מתאר קובץ.
כדי ליצור שירות VPN, משתמשים ב-VpnService.Builder
, שמאפשר לציין את כתובת הרשת, שרת ה-DNS, מסלול הרשת ועוד. בסיום, אפשר ליצור את הממשק באמצעות קריאה ל-establish()
, שמחזירה ParcelFileDescriptor
.
מכיוון ששירות VPN יכול ליירט מנות, יש לכך השלכות על האבטחה. לכן, אם
להטמיע את VpnService
, ואז השירות חייב לדרוש את המאפיין BIND_VPN_SERVICE
כדי להבטיח שרק המערכת תוכל לקשר אליו (רק
שהמערכת קיבלה את ההרשאה הזו – אפליקציות לא יכולות לבקש אותה). כדי להשתמש בשירות ה-VPN:
המשתמשים חייבים להפעיל אותו באופן ידני בהגדרות המערכת.
מדיניות המכשיר
אפליקציות שמנהלות את הגבלות המכשיר יכולות עכשיו להשבית את המצלמה באמצעות setCameraDisabled()
והמאפיין USES_POLICY_DISABLE_CAMERA
(שמיושמים באמצעות רכיב <disable-camera />
בקובץ התצורה של המדיניות).
ניהול אישורים
המחלקה החדשה של KeyChain
מספקת ממשקי API שמאפשרים לייבא ולגשת
אישורים במאגר מפתחות המערכת. אישורים מאפשרים התקנה יעילה יותר של אישורי לקוח (כדי לאמת את הזהות של המשתמש) ושל אישורי רשות אישורים (כדי לאמת את הזהות של השרת). אפליקציות כמו דפדפני אינטרנט או תוכנות אימייל יכולות לגשת
אישורים לאימות משתמשים מול שרתים. למידע נוסף, עיינו במסמכי התיעוד של KeyChain
.
חיישני המכשיר
שני סוגים חדשים של חיישנים נוספו ב-Android 4.0:
TYPE_AMBIENT_TEMPERATURE
: חיישן טמפרטורה שמספק את הטמפרטורה הסביבתית (בטמפרטורת החדר) במעלות צלזיוס.TYPE_RELATIVE_HUMIDITY
: חיישן לחות שמספק את הלחות היחסית בסביבה (בחדר) כאחוז.
אם במכשיר יש גם חיישנים של TYPE_AMBIENT_TEMPERATURE
וגם TYPE_RELATIVE_HUMIDITY
, אפשר להשתמש בהם כדי לחשב את נקודת הטל
ואת הלחות המוחלטת.
חיישן הטמפרטורה הקודם, TYPE_TEMPERATURE
,
הוצא משימוש. עליך להשתמש בחיישן TYPE_AMBIENT_TEMPERATURE
במקום זאת.
בנוסף, שלושת החיישנים הסינתטיים של Android שופרו באופן משמעותי, ועכשיו הם נמוכים יותר
זמן אחזור ופלט חלק יותר. החיישנים האלה כוללים את חיישן הכבידה (TYPE_GRAVITY
), חיישן וקטור הסיבוב (TYPE_ROTATION_VECTOR
) וחיישן ההאצה הליניארית (TYPE_LINEAR_ACCELERATION
). החיישנים המשופרים מסתמכים על חיישן הג'ירוסקופ כדי לשפר את הפלט שלהם, ולכן החיישנים מופיעים רק במכשירים שיש בהם ג'ירוסקופ.
סרגל פעולות
המדיניות ActionBar
עודכנה כדי לתמוך בכמה דפוסי התנהגות חדשים. נפוצים
וחשוב מאוד, המערכת מנהלת באלגנטיות את הגודל והתצורה של סרגל הפעולות במהלך הפעלה
במסכים קטנים יותר כדי לספק חוויית משתמש אופטימלית בכל גודלי המסכים. לדוגמה,
כשהמסך צר (למשל, כשהטלפון מוגדר לאורך), סרגל הפעולות
כרטיסיות הניווט מופיעות ב'סרגל מוערם', שמופיע ממש מתחת לסרגל הפעולות הראשי. אפשר
להצטרף ל'סרגל פעולות מפוצל', שמציב את כל הפעולות לביצוע בסרגל נפרד למטה
של המסך כשהמסך צר.
סרגל הפעולות של פיצול
אם סרגל הפעולות כולל מספר פעולות לביצוע, לא כולן יופיעו בסרגל הפעולות
מסך צר, כך שהמערכת תציב יותר מהם בתפריט האפשרויות הנוספות. עם זאת, ב-Android 4.0 אפשר להפעיל 'סרגל פעולות מפוצל' כדי שפריטי פעולה נוספים יוכלו להופיע במסך בסרגל נפרד בתחתית המסך. כדי להפעיל את סרגל הפעולות המפוצל, צריך להוסיף את android:uiOptions
עם "splitActionBarWhenNarrow"
לאחת מהאפשרויות
<application>
תג או
תגי <activity>
נפרדים
בקובץ המניפסט. כשהתכונה הזו מופעלת, המערכת מוסיפה סרגל נוסף בתחתית המסך לכל פעולות האפשריות כשהמסך צר (אף פעולה לא תופיע בסרגל הפעולות הראשי).
אם אתם רוצים להשתמש בכרטיסי הניווט שסופקו על ידי ממשקי ה-API של ActionBar.Tab
, אבל אתם לא צריכים את סרגל הפעולות הראשי בחלק העליון (אתם רוצים שרק הכרטיסיות יופיעו בחלק העליון), צריך להפעיל את סרגל הפעולות המפוצל כמו שמתואר למעלה, וגם להפעיל את setDisplayShowHomeEnabled(false)
כדי להשבית את סמל האפליקציה בסרגל הפעולות. אם לא תישאר שום פעולה בסרגל הפעולות הראשי, הוא ייעלם. כל מה שיישאר הם כרטיסיות הניווט בחלק העליון ופריטי הפעולות לביצוע בחלק התחתון של המסך.
סגנונות של סרגל הפעולות
אם רוצים להחיל עיצוב מותאם אישית על סרגל הפעולות, אפשר להשתמש במאפייני הסגנון החדשים backgroundStacked
ו-backgroundSplit
כדי להחיל drawable או צבע של רקע על הסרגל הממוזער ועל הסרגל המפוצל, בהתאמה. אפשר להגדיר את הסגנונות האלה גם בכתובת
עם setStackedBackgroundDrawable()
ו-setSplitBackgroundDrawable()
.
ספק הפעולות
הכיתה החדשה ActionProvider
מאפשרת ליצור טיפול מותאם אישית לפעולות. ספק פעולות יכול להגדיר תצוגת פעולות, התנהגות ברירת מחדל של פעולות ותפריט משנה
לכל פעולה לביצוע שאליה היא משויכת. כשרוצים ליצור פריט פעולה עם התנהגויות דינמיות (כמו תצוגת פעולה משתנה, פעולת ברירת מחדל או תפריט משנה), הרחבת ActionProvider
היא פתרון טוב ליצירת רכיב לשימוש חוזר, במקום לטפל בטרנספורמציות השונות של פריטי הפעולה בחלק או בפעילות.
לדוגמה, ShareActionProvider
הוא תוסף של ActionProvider
שמאפשר להשתמש ב'שיתוף' פעולה מסרגל הפעולות. במקום להשתמש ב-
פעולה מסורתית שמפעילה את ה-Intent ACTION_SEND
, אפשר
להשתמש בספק הפעולה הזה כדי להציג תצוגת פעולות עם רשימה נפתחת של אפליקציות שמטפלות
את הכוונה ACTION_SEND
. כשהמשתמש בוחר אפליקציה לשימוש
לביצוע הפעולה, ShareActionProvider
זוכר את הבחירה הזו ומספק
בתצוגת הפעולה כדי לאפשר גישה מהירה יותר לשיתוף עם אותה אפליקציה.
כדי להצהיר על ספק פעולה לפריט פעולה, צריך לכלול את המאפיין android:actionProviderClass
באלמנט <item>
של תפריט האפשרויות של הפעילות, עם שם הכיתה של ספק הפעולה בתור הערך. לדוגמה:
<item android:id="@+id/menu_share" android:title="Share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" />
בשיטת ה-callback onCreateOptionsMenu()
של הפעילות, מאחזרים מופע של ספק הפעולה מפריט התפריט ומגדירים את הכוונה:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options, menu) val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider // Set the share intent of the share action provider. shareActionProvider?.setShareIntent(createShareIntent()) ... return super.onCreateOptionsMenu(menu) }
Java
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // Set the share intent of the share action provider. shareActionProvider.setShareIntent(createShareIntent()); ... return super.onCreateOptionsMenu(menu); }
דוגמה לשימוש ב-ShareActionProvider
מופיעה ב-ActionBarShareActionProviderActivity ב-ApiDemos.
תצוגת פעולה שניתן לכווץ
פעולות לביצוע שמספקות תצוגת פעולה יכולות עכשיו לעבור בין מצב תצוגת הפעולה
על מצב מסורתי של פעולה לביצוע. בעבר, רק הרכיב SearchView
תמך באפשרות לכווץ אותו כשמשתמשים בו בתצוגת פעולה. עכשיו אפשר להוסיף תצוגת פעולה לכל פריט פעולה ולעבור בין המצב המורחב (תצוגת הפעולה גלויה) למצב המכווץ (פריט הפעולה גלוי).
כדי להצהיר שאפשר לכווץ פריט פעולה שמכיל תצוגת פעולה, צריך לכלול את הדגל “collapseActionView"
במאפיין android:showAsAction
של האלמנט <item>
בקובץ ה-XML של התפריט.
כדי לקבל קריאות חוזרות (callback) כשתצוגת פעולה עוברת בין תצוגה מורחבת למכווצת, צריך לרשום
של MenuItem.OnActionExpandListener
עם MenuItem
המתאים, באמצעות הפקודה setOnActionExpandListener()
. בדרך כלל, צריך לעשות זאת במהלך קריאת החזרה (callback) של onCreateOptionsMenu()
.
כדי לשלוט בתצוגת פעולה שאפשר לכווץ, אפשר להפעיל את collapseActionView()
ואת expandActionView()
MenuItem
בהתאמה.
כשיוצרים תצוגה של פעולה מותאמת אישית, אפשר גם להטמיע את ממשק CollapsibleActionView
החדש כדי לקבל קריאות חוזרות (callback) כשהתצוגה מורחבת
במצב מכווץ.
ממשקי API אחרים לסרגל הפעולות
setHomeButtonEnabled()
מאפשר לך לציין אם הסמל/הלוגו פועלים כלחצן לניווט לדף הבית או למעלה (הזינו את המילה 'TRUE' כדי שיתנהג כמו לחצן).setIcon()
ו-setLogo()
מאפשרים להגדיר את הסמל או הלוגו של סרגל הפעולות בזמן הריצה.Fragment.setMenuVisibility()
מאפשר לך להפעיל או להשבית את הרשאות הגישה לאפשרויות בתפריט האפשרויות שהוצהרו על ידי המקטע. האפשרות הזו שימושית אם הקטע נוסף לפעילות אבל הוא לא גלוי, ולכן צריך להסתיר את פריטי התפריט.FragmentManager.invalidateOptionsMenu()
מאפשרת לבטל את התוקף של תפריט אפשרויות הפעילות במהלך מצבים שונים של מחזור החיים של המקטע שבהם שימוש בשיטה המקבילה מ-Activity
לא יהיה זמין.
ממשק משתמש ותצוגות
מערכת Android 4.0 כוללת מגוון תצוגות חדשות ורכיבים אחרים בממשק המשתמש.
פריסת רשת
GridLayout
היא קבוצת תצוגה חדשה שמציבה תצוגות צאצא בתוך רשת מלבנית. בשונה מ-TableLayout
, GridLayout
מסתמכת על
היררכית ולא משתמשת בתצוגות ביניים, כמו שורות בטבלה, כדי לספק מבנה.
במקום זאת, צאצאים מציינים אילו שורות ועמודות הן צריכות לכלול (תאים יכולים להתפרס על פני מספר עמודות)
שורות ו/או עמודות), וכברירת מחדל, מסודרות ברצף בין השורות והעמודות של הרשת.
הכיוון GridLayout
קובע אם הצאצאים ברצף יוצגו כברירת מחדל במאוזן או באלכסון. אפשר לציין את המרחק בין הצאצאים באמצעות מכונות של התצוגה החדשה Space
או על ידי הגדרת הפרמטרים הרלוונטיים של השוליים בצאצאים.
ראו ApiDemos
לדגימות באמצעות GridLayout
.
תצוגת מרקם
TextureView
היא תצוגה חדשה שמאפשרת להציג מקור תוכן, כמו
כסרטון או כתמונת OpenGL. למרות הדמיון ל-SurfaceView
, הערך TextureView
הוא ייחודי בכך שהוא מתנהג כמו תצוגה רגילה, במקום ליצור חלון נפרד, כך שאפשר להתייחס אליו כמו לכל אובייקט View
אחר. לדוגמה,
אפשר לבצע שינויים בשינויים, להנפיש אותם באמצעות ViewPropertyAnimator
, או
לכוונן את השקיפות שלו באמצעות setAlpha()
.
חשוב לזכור ש-TextureView
פועל רק בחלון עם שיפור מהירות באמצעות חומרה.
מידע נוסף זמין במסמכי העזרה של TextureView
.
החלפת ווידג'ט
הווידג'ט החדש Switch
הוא מתג עם שני מצבים, והמשתמשים יכולים לגרור אותו לצד אחד או לשני (או פשוט להקיש עליו) כדי להעביר אפשרות בין שני מצבים.
אפשר להשתמש במאפיינים android:textOn
ו-android:textOff
כדי לציין את הטקסט
יופיע במתג כאשר ההגדרה מופעלת וכבויה. המאפיין android:text
מאפשר גם להציב תווית לצד המתג.
לדוגמה של שימוש במתגים, ראו את קובץ הפריסה switches.xml ואת הפעילות Switches המתאימה.
תפריטים מוקפצים
ב-Android 3.0 הושקה גרסה של PopupMenu
שמאפשרת ליצור תפריטי הקשר קצרים שקופצים
בנקודת עוגן שציינתם (בדרך כלל בנקודה של הפריט שנבחר). Android 4.0 מורחב
PopupMenu
עם כמה תכונות שימושיות:
- עכשיו אפשר בקלות להרחיב את התוכן של תפריט קופץ ממשאב תפריט ב-XML באמצעות
inflate()
, ולהעביר לו את מזהה משאב התפריט. - עכשיו אפשר גם ליצור
PopupMenu.OnDismissListener
שמקבל קריאה חוזרת (callback) כשהתפריט נסגר.
העדפות
שיעור מופשט חדש ב-TwoStatePreference
משמש כבסיס
העדפות שמאפשרות בחירה בשני מצבים. הגרסה החדשה של SwitchPreference
היא תוסף של TwoStatePreference
שמספק את הווידג'ט Switch
תצוגת העדפה שמאפשרת למשתמשים להפעיל או להשבית הגדרה מבלי לפתוח
מסך ההעדפות או תיבת דו-שיח. לדוגמה, האפליקציה 'הגדרות' משתמשת ב-SwitchPreference
עבור הגדרות ה-Wi-Fi וה-Bluetooth.
עיצובים של המערכת
עיצוב ברירת המחדל של כל האפליקציות שמטרגטות את Android 4.0 (על ידי הגדרת targetSdkVersion
או minSdkVersion
ל-“14"
ואילך) הוא עכשיו 'עיצוב ברירת המחדל של המכשיר': Theme.DeviceDefault
. יכול להיות שזה יהיה עיצוב Holo כהה או עיצוב כהה אחר שמוגדר במכשיר הספציפי.
משפחת העיצובים Theme.Holo
לא משתנה ממכשיר למכשיר כשהם פועלים באותה גרסת Android. אם מחילים באופן מפורש את אחד מהעיצובים של Theme.Holo
על הפעילויות, אפשר להיות בטוחים שהעיצובים האלה לא ישתנו במכשירים שונים באותה גרסת פלטפורמה.
אם רוצים שהאפליקציה תשתלב עם העיצוב הכללי של המכשיר (למשל, יצרני ציוד מקורי שונים).
הגדרת עיצובי ברירת מחדל שונים למערכת), צריך להחיל באופן מפורש עיצובים ממשפחת Theme.DeviceDefault
.
לחצן של תפריט האפשרויות
החל מגרסה 4.0 של Android, תבחינו שבטלפונים ניידים כבר אין צורך בלחצן חומרה של תפריט. עם זאת, אין צורך לדאוג אם האפליקציה הקיימת מספקת תפריט אפשרויות ומצפה שיהיה לחצן תפריט. כדי להבטיח שהאפליקציות הקיימות ימשיכו לפעול כצפוי, המערכת מספקת לחצן התפריט שמופיע במסך לאפליקציות שתוכננו לגרסאות ישנות יותר של Android.
כדי ליהנות מחוויית המשתמש הטובה ביותר, אפליקציות חדשות ומעודכנות צריכות להשתמש במקום זאת בActionBar
כדי לתת גישה לאפשרויות בתפריט ולהגדיר את targetSdkVersion
לערך
"14"
כדי לנצל את היתרונות של התנהגויות ברירת המחדל העדכניות של framework.
אמצעי בקרה להרשאות הגישה לממשק המשתמש של המערכת
מאז ימי Android הראשונים, המערכת מנהלת רכיב של ממשק משתמש המכונה סטטוס , שנמצא בחלק העליון של מכשירי הטלפון כדי לספק מידע כמו הספק אות, שעה, התראות וכן הלאה. ב-Android 3.0 נוספה סרגל המערכת למכשירי טאבלט. הוא ממוקם בחלק התחתון של המסך ומכיל את פקדי הניווט במערכת (דף הבית, חזרה וכו'), וגם ממשק לרכיבים שסרגל הסטטוס מספק בדרך כלל. לחשבון ב-Android 4.0, המערכת מספקת סוג חדש של ממשק משתמש במערכת שנקרא סרגל הניווט. שלך יכול לראות שסרגל הניווט הוא גרסה שעברה כוונון מחדש של סרגל המערכת טלפונים ניידים - הוא מספק פקדי ניווט עבור מכשירים שאין להם אפליקציות מקבילות בחומרה לניווט במערכת, אבל היא משמיטה את ממשק המשתמש של ההתראות בסרגל המערכת ופקדי ההגדרות. לכן, במכשיר שיש בו סרגל ניווט יש גם את שורת הסטטוס בחלק העליון.
עד היום, אפשר להסתיר את שורת הסטטוס במכשירים ניידים באמצעות הדגל FLAG_FULLSCREEN
. ב-Android 4.0, ממשקי ה-API ששולטים בחשיפה של סרגל המערכת עודכנו כדי לשקף טוב יותר את ההתנהגות של סרגל המערכת ושל סרגל הניווט:
- הדגל
SYSTEM_UI_FLAG_LOW_PROFILE
מחליף את הדגלSTATUS_BAR_HIDDEN
. כשהדגל הזה מוגדר, הוא מפעיל את המצב 'פרופיל נמוך' בסרגל המערכת או בסרגל הניווט. לחצני הניווט מעומעמים ורכיבים אחרים בסרגל המערכת גם מוסתרים. מפעיל כך אפשר ליצור משחקים סוחפים יותר בלי הסחות דעת לניווט במערכת. הלחצנים. - הדגל
SYSTEM_UI_FLAG_VISIBLE
מחליף את הדגלSTATUS_BAR_VISIBLE
כדי לבקש שהסרגל המערכת או סרגל הניווט יהיו גלויים. - השדה
SYSTEM_UI_FLAG_HIDE_NAVIGATION
הוא דגל חדש שמבקש שסרגל הניווט מוסתר לגמרי. לתשומת ליבך: האפשרות הזו פועלת רק בסרגל הניווט. בטלפונים מסוימים, הוא לא מסתיר את סרגל המערכת בטאבלטים). הניווט העמודה תחזור לתצוגה ברגע שהמערכת מקבלת קלט ממשתמשים. לכן המצב הזה מועיל בעיקר להפעלת וידאו או במקרים אחרים שבהם צריך את כל המסך אבל הקלט של המשתמשים לא נדרש.
אפשר להגדיר כל אחד מהדגלים האלה בסרגל המערכת ובסרגל הניווט באמצעות קריאה ל-setSystemUiVisibility()
בכל תצוגה בפעילות. מנהל החלונות משלב (OR-together) את כל הדגלים מכל התצוגות בחלון ומחילה אותם על ממשק המשתמש של המערכת כל עוד החלון נמצא ב-input focus. כשהמערכת מאבדת קלט מהחלון
(המשתמש מנווט אל מחוץ לאפליקציה, או שמופיעה תיבת דו-שיח), הדגלים יפסיקו לפעול.
באופן דומה, אם תסירו את התצוגות האלה מהיררכיית התצוגות, הדגלים שלהן לא יחולו יותר.
כדי לסנכרן אירועים אחרים בפעילות שלכם עם שינויי הרשאות גישה בממשק המשתמש של המערכת (ל
לדוגמה, הסתרת סרגל הפעולות או פקדים אחרים של ממשק המשתמש כאשר ממשק המשתמש של המערכת מוסתר), עליך לרשום
View.OnSystemUiVisibilityChangeListener
כדי לקבל התראה כשהחשיפה
של השינויים בסרגל המערכת או בסרגל הניווט.
כדאי לעיין בכיתה OverscanActivity כדי לראות הדגמה של אפשרויות שונות של ממשק המשתמש של המערכת.
מסגרת קלט
ב-Android 4.0 נוספה תמיכה באירועים של העברת סמן העכבר ובאירועים חדשים של סטיילוס ולחצן העכבר.
אירועי העברת העכבר
הכיתה View
תומכת עכשיו באירועי 'החזקה מעל' כדי לאפשר אינטראקציות עשירות יותר באמצעות אמצעי הצבעה (כמו עכבר או מכשירים אחרים שמפעילים את הסמן במסך).
כדי לקבל אירועי מעברי עכבר בתצוגה, מטמיעים את View.OnHoverListener
ומרשמים אותו באמצעות setOnHoverListener()
. כשמתרחש אירוע של מעקב אחר העכבר בתצוגה, ה-listener מקבל קריאה ל-onHover()
, עם הפרטים של View
שקיבל את האירוע ושל MotionEvent
שמתאר את סוג אירוע המעקב אחר העכבר שהתרחש. אירוע ההעברה מעל יכול להיות אחד מהאירועים הבאים:
הפונקציה View.OnHoverListener
צריכה להחזיר את הערך true מ-onHover()
אם היא מטפלת באירוע ההעברה עם העכבר מעל. אם
ה-listener מחזיר את הערך false, ואירוע העברת העכבר יישלח לתצוגת ההורה כרגיל.
אם היישום שלך משתמש בלחצנים או בווידג'טים אחרים שמשנים את המראה שלהם על סמך
במצב הנוכחי, עכשיו אפשר להשתמש במאפיין android:state_hovered
ברשימת מדינות שניתן להזזה כדי
לספק רקע אחר שניתן לצייר כאשר יש סמן העכבר מעל התצוגה.
להדגמה של האירועים החדשים של העברת העכבר, אפשר לעיין בשיעור העברת העכבר ב ApiDemos.
אירועים של לחצן עכבר ועט
ב-Android יש עכשיו ממשקי API לקבלת קלט ממכשיר לקליטת נתונים באמצעות סטיילוס, כמו מכשיר דיגיטלי ציוד היקפי לטאבלט או מסך מגע שמופעל בו שימוש בסטיילוס.
קלט הסטיילוס פועל באופן דומה לקלט מגע או קלט עכבר. כשהסטיילוס נמצא במגע עם הדיגיטייזר, האפליקציות מקבלות אירועי מגע בדיוק כמו שעושים בהן שימוש באצבע נוגעים במסך. כשהעט מרחף מעל לחיישן הדיגיטלי, האפליקציות מקבלות אירועי ריחוף בדיוק כמו שהן מקבלות כשסמן העכבר נע על המסך בלי ללחוץ על לחצנים.
כדי להבדיל בין קלט באמצעות אצבע, עכבר, עט או מחק, האפליקציה יכולה לשלוח שאילתה לגבי 'סוג הכלי' שמשויך לכל סמן ב-MotionEvent
באמצעות getToolType()
. סוגי הכלים שמוגדרים כרגע הם: TOOL_TYPE_UNKNOWN
, TOOL_TYPE_FINGER
,
TOOL_TYPE_MOUSE
, TOOL_TYPE_STYLUS
ו-TOOL_TYPE_ERASER
. על ידי שאילתה על סוג הכלי, האפליקציה
יכול לטפל בקלט סטיילוס בדרכים שונות מהקלט באמצעות האצבע או העכבר.
האפליקציה יכולה גם לבצע שאילתה על אילו לחצני עכבר או סטיילוס לוחצים על ידי שליחת שאילתה על הלחצן "
מצב" של MotionEvent
באמצעות getButtonState()
. מצבי הלחצן שמוגדרים כרגע הם: BUTTON_PRIMARY
, BUTTON_SECONDARY
, BUTTON_TERTIARY
, BUTTON_BACK
ו-BUTTON_FORWARD
. לנוחיותכם, לחצני העכבר קדימה ואחורה
ממופה באופן אוטומטי למפתחות KEYCODE_BACK
ו-KEYCODE_FORWARD
. האפליקציה יכולה לטפל במפתחות האלה כדי לתמוך בניווט קדימה ואחורה באמצעות לחצני העכבר.
בנוסף למדידה מדויקת של המיקום והלחץ של איש קשר, חלק מקלט הסטיילוס
במכשירים האלה גם מדווח המרחק בין קצה הסטיילוס לדיגיטלי, זווית הטיית הסטיילוס.
ואת זווית הכיוון של הסטיילוס. האפליקציה יכולה לשלוח שאילתה לגבי המידע הזה באמצעות getAxisValue()
עם קודי הצירים AXIS_DISTANCE
, AXIS_TILT
ו-AXIS_ORIENTATION
.
כדי לראות הדגמה של סוגי הכלים, מצבי הלחצנים וקודי הצירים החדשים, אפשר לעיין בכיתה TouchPaint ב-ApiDemos.
מאפיינים
הכיתה החדשה Property
מספקת דרך מהירה, יעילה וקלה לציין
בכל אובייקט שמאפשר למתקשרים להגדיר/לקבל ערכים באופן כללי באובייקטי יעד. כמו כן
הפונקציה מאפשרת להעביר הפניות לשדות/ל-method, ומאפשרת לקוד להגדיר/לקבל ערכים.
של הנכס בלי לדעת את הפרטים לגבי השדות/השיטות.
לדוגמה, אם רוצים להגדיר את הערך של השדה bar
באובייקט foo
, צריך
עשו זאת בעבר:
Kotlin
foo.bar = value
Java
foo.bar = value;
אם רוצים לקרוא לרכיב המגדיר בשדה פרטי בסיסי bar
, קודם צריך לבצע את הפעולה הבאה
עושים זאת:
Kotlin
foo.setBar(value)
Java
foo.setBar(value);
עם זאת, אם רוצים להעביר את המכונה של foo
ולהגדיר קוד אחר
בערך bar
, אין באמת דרך לעשות זאת לפני Android 4.0.
באמצעות הכיתה Property
, אפשר להצהיר על אובייקט Property
BAR
בכיתה Foo
כדי להגדיר את השדה במופע foo
של הכיתה Foo
באופן הבא:
Kotlin
BAR.set(foo, value)
Java
BAR.set(foo, value);
הכיתה View
משתמשת עכשיו בכיתה Property
כדי
מאפשרות להגדיר שדות שונים, כמו טרנספורמציה של מאפיינים שנוספו ב-Android 3.0 (ROTATION
, ROTATION_X
, TRANSLATION_X
וכו').
גם הכיתה ObjectAnimator
משתמשת בכיתה Property
, כך שאפשר ליצור ObjectAnimator
באמצעות Property
. הפתרון הזה מהיר, יעיל ובטוח יותר מבחינת סוגי הנתונים מאשר הגישה שמבוססת על מחרוזות.
שיפור המהירות באמצעות חומרה
החל מ-Android 4.0, שיפור המהירות באמצעות חומרה בכל החלונות מופעל כברירת מחדל אם
האפליקציה הגדירה targetSdkVersion
או
minSdkVersion
עד
“14"
ומעלה. בדרך כלל, האצת החומרה מובילה לאנימציות חלקות יותר, לגלילה חלקה יותר ולביצועים טובים יותר באופן כללי, וגם לתגובה מהירה יותר לאינטראקציות של המשתמשים.
אם צריך, אפשר להשבית ידנית את שיפור המהירות באמצעות חומרה באמצעות המאפיין hardwareAccelerated
לרכיבים ספציפיים מסוג <activity>
או באמצעות הרכיב <application>
. לחלופין, אפשר להשבית את האצת החומרה בתצוגות ספציפיות באמצעות קריאה ל-setLayerType(LAYER_TYPE_SOFTWARE)
.
מידע נוסף על שיפור המהירות באמצעות חומרה, כולל רשימת שרטוט שלא נתמך מידע נוסף, אפשר לעיין בחומרה מסמך האצה.
שינויים ב-JNI
בגרסאות הקודמות של Android, הפניות המקומיות של JNI לא היו כינויים עקיפים. Android בשימוש מצביעים ישירים. זה לא היה בעיה כל עוד מנקה האשפה לא העביר אובייקטים, אבל נראה שזה עבד כי אפשר היה לכתוב קוד עם באגים. ב-Android 4.0, המערכת משתמשת כעת הפניות עקיפה כדי לזהות באגים כאלה.
כל הפרטים הנוספים של התייחסויות מקומיות מ-JNI מתוארות ב'קובצי עזר מקומיים וגלובליים' במאמר טיפים בנושא JNI. ב-Android 4.0, CheckJNI שופר כדי לזהות את השגיאות האלה. כדי לפרסם פוסט שיפורסם בקרוב, אפשר לצפות ב-Android Developers Blog על שגיאות נפוצות בהפניות JNI ואיך לתקן אותן.
השינוי בהטמעת ה-JNI משפיע רק על אפליקציות שמטרגטות ל-Android 4.0 על ידי הגדרה של
targetSdkVersion
או minSdkVersion
עד “14"
ואילך. אם הגדרתם את המאפיינים האלה לערך נמוך יותר,
קובצי העזר המקומיים של JNI מתנהגים בדיוק כמו בגרסאות הקודמות.
WebKit
- WebKit עודכן לגרסה 534.30
- תמיכה בגופנים הודיים (דנאוואגרי, בנגלית וטמילית, כולל תמיכה בתווים מורכבים שנדרשים לשילוב גליפים) ב-
WebView
ובדפדפן המובנה - תמיכה בגופנים אתיופיים, גיאורגיים וארמניים ב
WebView
דפדפן מובנה - התמיכה ב-WebDriver מאפשרת לכם לבדוק בקלות רבה יותר אפליקציות שמשתמשות ב-
WebView
דפדפן Android
יישום הדפדפן מוסיף את התכונות הבאות לתמיכה באפליקציות אינטרנט:
- עודכן מהדר JavaScript של V8 לביצועים מהירים יותר
- ועוד שיפורים חשובים אחרים שהועברו מ-Android
גרסה 3.0 זמינה עכשיו למכשירים ניידים:
- תמיכה ברכיבים במיקום קבוע בכל הדפים
- צילום מדיה בפורמט HTML
- אירועים של כיוון המכשיר
- טרנספורמציות תלת-ממד ב-CSS
הרשאות
אלו ההרשאות החדשות:
ADD_VOICEMAIL
: הרשאה שמאפשרת לשירות דואר קולי להוסיף הודעות דואר קולי למכשיר.BIND_TEXT_SERVICE
: שירות שמטמיע אתSpellCheckerService
חייב לדרוש את ההרשאה הזו לעצמו.BIND_VPN_SERVICE
: שירות שמטמיע אתVpnService
חייב לדרוש את ההרשאה הזו לעצמו.- android.Manifest.permission#READ_PROFILE: מספקת גישת קריאה לספק
ContactsContract.Profile
. - android.Manifest.permission#WRITE_PROFILE: מספקת גישת כתיבה לספק
ContactsContract.Profile
.
תכונות המכשיר
אלה התכונות החדשות במכשיר:
FEATURE_WIFI_DIRECT
: הצהרה שהבקשה משתמשת Wi-Fi לתקשורת מקצה לקצה.
כדי לראות תצוגה מפורטת של כל השינויים ב-API ב-Android 4.0 (רמת API 14), אפשר לעיין בדוח ההבדלים ב-API.
ממשקי API קודמים
בנוסף לכל מה שצוין למעלה, מערכת Android 4.0 תומכת באופן טבעי בכל ממשקי ה-API מגרסאות קודמות. פלטפורמת Android 3.x זמינה רק למכשירים עם מסך גדול, ולכן אם פיתחתם בעיקר למכשירים ניידים, יכול להיות שאתם לא מודעים לכל ממשקי ה-API שנוספו ל-Android בגרסאות האחרונות.
הנה כמה מממשקי ה-API החשובים ביותר שאולי פספסת, שזמינים עכשיו גם במכשירים ניידים:
- Android 3.0
-
Fragment
: רכיב מסגרת שמאפשר להפריד בין רכיבים נפרדים של פעילות למודולים עצמאיים שמגדירים את ממשק המשתמש ומחזור החיים שלהם. לצפייה המדריך למפתחים של מקטעים.ActionBar
: תחליף לסרגל הכותרת המסורתי בחלק העליון של חלון הפעילות. הוא כולל את הלוגו של האפליקציה בפינה הימנית ומציע ממשק חדש לפריטי התפריט. אפשר לעיין במדריך למפתחים בנושא סרגל הפעולות.Loader
: רכיב framework שמאפשר גישה אסינכרונית טעינת נתונים בשילוב עם רכיבי ממשק משתמש כדי לטעון נתונים באופן דינמי מבלי לחסום את של ה-thread הראשי. לצפייה מדריך למפתחים של Loaders- לוח העריכה של המערכת: אפליקציות יכולות להעתיק ולהדביק נתונים (מעבר לטקסט בלבד) אל וממנו את הלוח ברמת המערכת. נתונים חתוכים יכולים להיות טקסט פשוט, URI או כוונה. אפשר לעיין במדריך למפתחים בנושא העתקה והדבקה.
- גרירה ושחרור: קבוצה של ממשקי API מובנים בתוך מסגרת התצוגה, המאפשרים גרירה ושחרור ב-AI. לצפייה מדריך למפתחים בנושא גרירה ושחרור.
- מסגרת אנימציה חדשה שמאפשרת הנפשה של מאפיינים שרירותיים של כל (תצוגה, שרטוט, מקטע, אובייקט או כל דבר אחר) ולהגדיר היבטי אנימציה כמו כמו משך זמן, אינטרפולציה, חזרה ועוד. בעזרת המסגרת החדשה, קל יותר מאי פעם ליצור אנימציות ב-Android. למידע נוסף, ראו המדריך למפתחים בנושא אנימציה של נכסים.
- גרפיקה ומנוע מחשוב של RenderScript: RenderScript מציע תלת-ממד בעל ביצועים גבוהים. עיבוד גרפיקה ו-Compute API ברמת המקור, שאותם כותבים בתקן C99 (C99), מספק את רמת הביצועים שאתם מצפים לקבל מסביבה מקורית, תוך שמירה על ניידות בכמה מעבדי CPU ומעבדי GPU. לצפייה מפתח של RenderScript מותאמת אישית.
- גרפיקה דו-ממדית עם האצת חומרה: כעת ניתן להפעיל את מעבד OpenGL עבור
על ידי הגדרה של {android:hardwareAccelerated="true"} ב-
<application>
של רכיב המניפסט אלמנט או עבור יחיד<activity>
רכיבים. התוצאה של התהליך הזה באנימציות חלקות יותר, גלילה חלקה יותר וביצועים טובים יותר באופן כללי ותגובה טובה יותר למשתמש אינטראקציה חוזרת.הערה: אם מגדירים את
minSdkVersion
או אתtargetSdkVersion
של האפליקציה לערך"14"
ומעלה, שיפור המהירות באמצעות חומרה מופעל כברירת מחדל. - ועוד הרבה יותר. מידע נוסף זמין בהערות לגבי פלטפורמת Android 3.0.
- Android 3.1
-
- ממשקי USB API: ממשקי API חדשים וחזקים לשילוב ציוד היקפי מחובר עם אפליקציות ל-Android. ממשקי ה-API מבוססים על שירותים וסטאק USB שמובנים בפלטפורמה, כולל תמיכה באינטראקציות עם מארחי USB ועם מכשירים. כדאי לעיין במדריך למפתחים של מארח ואביזרים בחיבור USB.
- ממשקי API של MTP/PTP: אפליקציות יכולות לקיים אינטראקציה ישירה עם מצלמות מחוברות ועם מכשירי PTP אחרים כדי לקבל התראות כשהמכשירים מחוברים ומנותקים, לנהל את הקבצים ואת האחסון במכשירים האלה ולהעביר קבצים ומטא-נתונים אליהם ומהם. ממשק ה-API של MTP מטמיע את ה-PTP
(Picture Transfer Protocol) משנה את מפרט ה-MTP (פרוטוקול העברת מדיה). אפשר לעיין במסמכי התיעוד של
android.mtp
. - ממשקי API של RTP: Android חושף ממשק API למחסנית ה-RTP (Real-time Transport Protocol) המובנית שלו, שבאמצעותו אפליקציות יכולות לנהל סטרימינג של נתונים על פי דרישה או סטרימינג אינטראקטיבי. באופן ספציפי, אפליקציות שמספקות VOIP, לחיצה לדיבור, שיתוף מסך וסטרימינג של אודיו יכולות להשתמש ב-API כדי להתחיל סשנים ולשלוח או לקבל מקורות נתונים דרך כל רשת זמינה. לעיון במסמכי התיעוד של
android.net.rtp
. - תמיכה בלחצני ג'ויסטיק ובכניסות תנועה כלליות אחרות.
- בהערות לגבי פלטפורמת Android 3.1 מפורטים ממשקי API חדשים רבים נוספים.
- Android 3.2
-
- מסכים חדשים תומכים בממשקי API שמעניקים לך שליטה רבה יותר על אופן הפעולה של האפליקציות יוצגו במסכים בגדלים שונים. ה-API מרחיב את מודל התמיכה הקיים במסכים ומאפשר לכם לטרגט במדויק טווחים ספציפיים של גדלי מסך לפי מאפיינים, שנמדדים ביחידות פיקסלים שלא תלויות בצפיפות (כמו 600dp או 720dp רוחב), ולא לפי גדלי המסך הכללים (כמו גדול או גדול במיוחד). לדוגמה, השלב הזה חשוב כדי לעזור לך הבחינו בין 5 אינץ' ומכשיר בגודל 7 אינץ' שבדרך כלל מסווגת בתור 'large' מסכים. לעיון בפוסט בבלוג, כלים חדשים לניהול גדלים של מסכים.
- ערכי קבועים חדשים ל-
<uses-feature>
כדי להצהיר על דרישות לכיוון המסך – לרוחב או לאורך. - גודל המסך של המכשיר ההגדרות האישיות משתנות עכשיו בזמן כיוון המסך
שינוי. אם האפליקציה שלך מטרגטת רמת API 13 ומעלה, עליך לטפל ב
"screenSize"
של ההגדרה האישית אם ברצונך לטפל גם בשינוי ההגדרה של"orientation"
. צפייה לקבלת מידע נוסף,android:configChanges
. - מידע נוסף זמין בפלטפורמת Android 3.2 הערות לגבי ממשקי API חדשים אחרים.
רמת ה-API
ל-Android 4.0 API מוקצה מספר שלם מזהה 14 שמאוחסן במערכת עצמה. המזהה הזה, שנקרא 'רמת ה-API', מאפשר למערכת לקבוע בצורה נכונה אם אפליקציה תואמת למערכת, לפני התקנת האפליקציה.
כדי להשתמש בממשקי API שהוצגו ב-Android 4.0 באפליקציה, צריך לקמפל את האפליקציה לפלטפורמת Android שתומכת ברמת API 14 ואילך. בהתאם לצרכים שלכם ייתכן שתצטרכו להוסיף גם
android:minSdkVersion="14"
אל
<uses-sdk>
לרכיב מסוים.
מידע נוסף זמין במאמר מהו API רמה?