ב-Android 12 יש תכונות וממשקי API חדשים ומעולים למפתחים. בקטעים הבאים מוסבר על התכונות של האפליקציות ואיך להתחיל להשתמש בממשקי ה-API הקשורים.
לרשימה מפורטת של ממשקי API חדשים, ששונו או שהוסרו, קראו את דוח ההבדלים ב-API. לפרטים על ממשקי API חדשים, אפשר לעיין במאמרי העזרה של Android API – ממשקי API חדשים מודגשים כדי שיהיה קל לראות אותם. כדי לדעת באילו תחומים השינויים בפלטפורמה עשויים להשפיע על האפליקציות שלכם, חשוב לבדוק את השינויים בהתנהגות של Android 12 באפליקציות שמטרגטות ל-Android 12 ובכל האפליקציות.
חוויית משתמש
Material You
ב-Android 12 יש שפת עיצוב חדשה שנקראת Material You, שעוזרת לכם ליצור אפליקציות יפות ומותאמות אישית יותר. כדי להוסיף לאפליקציות את כל העדכונים האחרונים של Material Design 3, נסו את גרסת האלפא של רכיבי Material Design.

שיפורים בווידג'טים
ב-Android 12, ממשק ה-API הקיים של הווידג'טים שופר כדי לשפר את חוויית המשתמש והמפתח בפלטפורמה ובמרכזי האפליקציות. יצרנו מדריך שיעזור לכם לוודא שהווידג'ט שלכם תואם ל-Android 12 ולרענן אותו עם תכונות חדשות.
מידע נוסף זמין במאמר שיפורים בווידג'טים של Android 12.
הוספת תוכן עשיר
ב-Android 12 יש API מאוחד חדש שמאפשר לאפליקציה לקבל תוכן עשיר מכל מקור זמין: הלוח, המקלדת או גרירה ושחרור.
מידע נוסף זמין במאמר קבלת תוכן עשיר.
App splash screens API
ב-Android 12 יש אנימציה חדשה להפעלת אפליקציות, שכוללת תנועה לתוך האפליקציה מנקודת ההפעלה, מסך פתיחה שבו מוצג סמל האפליקציה ומעבר לאפליקציה עצמה. פרטים נוספים זמינים במדריך למפתחים בנושא מסכי פתיחה.
ממשקי API של פינות מעוגלות
ב-Android 12 נוספו השיטות RoundedCorner ו-WindowInsets.getRoundedCorner(int
position), שמספקות את הרדיוס ואת נקודת המרכז של הפינות המעוגלות.
אפשר לקרוא מידע נוסף במאמר בנושא פינות מעוגלות.
חוויות עשירות של משוב פיזי
ב-Android 12 יש יותר כלים ליצירת משוב מפורט באמצעות מגע לאירועים בממשק המשתמש, אפקטים סוחפים ומהנים לגיימינג ומשוב באמצעות מגע שמושך את תשומת הלב לפרודוקטיביות.
אפקטים של אקטואטור
ב-Android 12 נוספו אפקטים אקספרסיביים כמו תקתוק חלש, שמנצלים את רוחב הפס הרחב יותר של התדרים במפעילים העדכניים. מפתחי משחקים יכולים עכשיו לגשת למספר מפעילים שונים באופן עצמאי בשלטי משחק כדי לספק את אותו אפקט באופן סינכרוני או אפקטים שונים של משוב פיזי במפעילים מרובים. למפתחים, אנחנו ממליצים להשתמש בקבועים ובפרימיטיבים כאבני בניין לאפקטים עשירים של משוב פיזי – קבועים לשיפור אירועים בממשק המשתמש ומלחין משוב פיזי לרצף פרימיטיבים לאפקטים מורכבים יותר. ממשקי ה-API האלה זמינים לניסיון במכשירי Pixel 4, ואנחנו ממשיכים לעבוד עם השותפים שלנו שמייצרים מכשירים כדי להביא את החידושים האחרונים בתמיכה במשוב פיזי למשתמשים בכל הסביבה העסקית.
אפקטים של משוב פיזי שמותאמים לאודיו
אפליקציות ב-Android 12 יכולות ליצור משוב פיזי שנובע מסשן אודיו באמצעות הרטט של הטלפון. כך אפשר ליהנות מחוויית משחק ואודיו סוחפת יותר. לדוגמה, רינגטונים עם משוב פיזי יכולים לעזור לזהות את המתקשרים, ובמשחק נהיגה אפשר לדמות את התחושה של נסיעה בשטח קשה.
מידע נוסף מופיע בHapticGenerator.
AppSearch
ב-Android 12 נוסף AppSearch, מנוע חיפוש במכשיר עם ביצועים גבוהים, כשירות מערכת. AppSearch מאפשר לאפליקציות להוסיף נתונים מובְנים לאינדקס ולחפש בהם באמצעות יכולות מובנות של חיפוש טקסט מלא. בנוסף, AppSearch תומכת בתכונות חיפוש מקומיות, כמו הוספה לאינדקס ואחזור מידע בצורה יעילה, תמיכה במספר שפות ודירוג רלוונטיות.
יש שני סוגים של AppSearch: אינדקס מקומי לשימוש באפליקציה שתואם לגרסאות ישנות יותר של Android, או אינדקס מרכזי שמנוהל לכל המערכת ב-Android 12. באמצעות האינדקס המרכזי, האפליקציה יכולה לאפשר הצגה של הנתונים שלה בממשק המשתמש של המערכת על ידי רכיב ה-AI המותקן מראש במערכת. הנתונים שמוצגים בממשקי המשתמש של המערכת תלויים ב-OEM. בנוסף, האפליקציה יכולה לשתף נתונים באופן מאובטח עם אפליקציות אחרות, כדי לאפשר להן לחפש גם בנתונים האלה.
במדריך למפתחים מוסבר איך משתמשים ב-AppSearch, ו בספריית AppSearch Jetpack יש ממשק API נוח למפתחים ותמיכה במעבד אנוטציות (Annotation processor) .
מצב משחק
Game Mode API והתערבויות של מצב משחק מאפשרים לכם לשפר את הגיימפליי על ידי תעדוף מאפיינים, כמו ביצועים או חיי סוללה, על סמך הגדרות המשתמשים או הגדרות ספציפיות למשחק.
מידע נוסף זמין במאמר בנושא מצב משחק.
המלצות ושיפורים בנושא "תמונה בתוך תמונה" (PiP)
ב-Android 12 נוספו השיפורים הבאים למצב "תמונה בתוך תמונה":
תמיכה בתנועות חדשות במצב "תמונה בתוך תמונה" (PIP)
ב-Android 12 יש עכשיו תמיכה בתנועות של הסתרה ופתיחה וסגירה של האצבעות בחלון התמונה בתוך תמונה:
כדי להסתיר את החלון, המשתמש יכול לגרור אותו לקצה השמאלי או הימני. כדי להחזיר את החלון למסך, המשתמש יכול ללחוץ על החלק הגלוי של החלון או לגרור אותו החוצה.
עכשיו המשתמש יכול לשנות את הגודל של חלון ה-PiP באמצעות תנועת צביטה.
תכונות חדשות מומלצות שמשפרות את חוויית המעבר למצב PiP
ב-Android 12 נוספו שיפורים משמעותיים במראה של המעברים המונפשים בין מסך מלא לחלונות PiP. מומלץ מאוד להטמיע את כל השינויים הרלוונטיים. אחרי שתעשו את זה, השינויים האלה יותאמו באופן אוטומטי למסכים גדולים כמו מכשירים מתקפלים וטאבלטים, בלי שתצטרכו לעשות שום דבר נוסף.
התכונות האלה הן:
דגל API חדש למעבר חלק יותר למצב "תמונה בתוך תמונה" באמצעות ניווט בתנועות
משתמשים בדגל
setAutoEnterEnabledכדי לספק מעברים חלקים יותר למצב PiP כשמחליקים למעלה כדי לעבור למסך הבית במצב ניווט באמצעות תנועות. בעבר, מערכת Android המתינה עד לסיום האנימציה של ההחלקה למעלה למסך הבית לפני שהחלון של התמונה בתוך תמונה הופיע בהדרגה.אנימציות חלקות יותר בכניסה למצב "תמונה בתוך תמונה" וביציאה ממנו
הדגל
SourceRectHintמשמש עכשיו להטמעת אנימציה חלקה יותר בכניסה למצב PiP וביציאה ממנו.דגל API חדש להשבתת שינוי גודל חלק של תוכן שאינו קטע וידאו
הדגל
SeamlessResizeEnabledמספק אנימציה חלקה יותר של מעבר הדרגתי כשמשנים את הגודל של תוכן שהוא לא וידאו בחלון PiP. בעבר, שינוי הגודל של תוכן שהוא לא קטע וידאו בחלון תמונה בתוך תמונה (PIP) יכול היה ליצור פגמים חזותיים צורמים.
התראות חדשות על שיחות טלפון שמאפשרות לדרג את החשיבות של שיחות נכנסות
ב-Android 12 נוסף סגנון חדש של התראות
Notification.CallStyle
לשיחות טלפון. התבנית הזו מאפשרת לאפליקציה להציג צ'יפ בולט בשורת הסטטוס עם משך השיחה, כדי להדגיש את החשיבות של שיחות פעילות. המשתמש יכול ללחוץ על הצ'יפ הזה כדי לחזור לשיחה.
שיחות נכנסות ושיחות פעילות הן הכי חשובות למשתמשים, ולכן ההתראות האלה מקבלות את הדירוג הכי גבוה בווילון. הדירוג הזה גם מאפשר למערכת להעביר את השיחות האלה למכשירים אחרים.
מטמיעים את הקוד הבא לכל סוגי השיחות.
Kotlin
// Create a new call with the user as caller. val incoming_caller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Java
// Create a new call with the user as caller. Person incoming_caller = new Person.Builder() .setName("Jane Doe") .setImportant(true) .build();
משתמשים ב-forIncomingCall() כדי ליצור התראה בסגנון שיחה לשיחה נכנסת.
Kotlin
// Create a call style notification for an incoming call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller)
Java
// Create a call style notification for an incoming call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller);
משתמשים ב-forOngoingCall() כדי ליצור התראה בסגנון שיחה לשיחה פעילה.
Kotlin
// Create a call style notification for an ongoing call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller)
Java
// Create a call style notification for an ongoing call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller);
משתמשים ב-forScreeningCall() כדי ליצור התראה בסגנון שיחה לסינון שיחה.
Kotlin
// Create a call style notification for screening a call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller)
Java
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller);
תמיכה בתמונות מועשרות בהתראות
ב-Android 12, אפשר עכשיו להעשיר את חוויית ההתראות של האפליקציה על ידי הוספת תמונות מונפשות בהתראות MessagingStyle() ו-BigPictureStyle(). בנוסף, עכשיו האפליקציה יכולה לאפשר למשתמשים לשלוח הודעות תמונה כשהם משיבים להודעות ממרכז ההתראות.
שיפורים במצב אימרסיבי לניווט באמצעות תנועות
ב-Android 12, ההתנהגות הקיימת אוחדה כדי להקל על המשתמשים לבצע פקודות ניווט באמצעות תנועות במצב אימרסיבי. בנוסף, Android 12 מספק התנהגות של תאימות לדורות קודמים במצב אימרסיבי קבוע.
שיתוף כתובות URL של פריטים אחרונים (Pixel בלבד)
במכשירי Pixel, המשתמשים יכולים עכשיו לשתף קישורים לתוכן מהאינטרנט שהם צפו בו לאחרונה ישירות מהמסך "אפליקציות אחרונות". אחרי שהמשתמשים צופים בתוכן באפליקציה, הם יכולים להחליק למסך "אפליקציות אחרונות" ולמצוא את האפליקציה שבה הם צפו בתוכן, ואז ללחוץ על כפתור הקישור כדי להעתיק או לשתף את כתובת ה-URL.
מידע נוסף זמין במאמר הפעלת שיתוף של כתובות URL מהזמן האחרון.
אבטחה ופרטיות
מרכז הבקרה להגדרות הפרטיות
במכשירים נתמכים עם Android מגרסה 12 ואילך, מופיע מסך של מרכז בקרת הפרטיות בהגדרות המערכת. במסך הזה, המשתמשים יכולים לגשת למסכים נפרדים שבהם מוצג מתי אפליקציות ניגשות למידע על המיקום, המצלמה והמיקרופון. בכל מסך מוצג ציר זמן של המועדים שבהם אפליקציות שונות ניגשו לסוג מסוים של נתונים. באיור 1 מוצג ציר הזמן של הגישה לנתוני המיקום.
האפליקציה יכולה לספק למשתמשים הסבר כדי לעזור להם להבין למה היא ניגשת למידע על המיקום, המצלמה או המיקרופון. ההסבר הזה יכול להופיע במסך החדש של מרכז הבקרה להגדרות הפרטיות, במסך ההרשאות של האפליקציה או בשניהם.
הרשאות Bluetooth
ב-Android 12 נוספו ההרשאות
BLUETOOTH_SCAN,
BLUETOOTH_ADVERTISE
ו-
BLUETOOTH_CONNECT. ההרשאות האלה מאפשרות לאפליקציות שמטרגטות את Android 12 ליצור אינטראקציה עם מכשירי Bluetooth, במיוחד לאפליקציות שלא דורשות גישה למיקום המכשיר.
עדכון הצהרות ההרשאות ל-Bluetooth באפליקציה
כדי להכין את המכשיר לטירגוט ל-Android 12 ואילך, צריך לעדכן את הלוגיקה של האפליקציה. במקום להצהיר על קבוצה מדור קודם של הרשאות Bluetooth, צריך להצהיר על קבוצה מודרנית יותר של הרשאות Bluetooth.
חיפוש קבוצת הרשאות
ב-Android מגרסה 12 ואילך, אפשר לשלוח שאילתה כדי לבדוק איך המערכת מארגנת את ההרשאות שסופקו על ידי הפלטפורמה בקבוצות הרשאות:
- כדי לקבוע לאיזו קבוצת הרשאות המערכת שייכה הרשאה שמוגדרת בפלטפורמה, צריך להפעיל את
getGroupOfPlatformPermission(). - כדי לקבוע את ההרשאות שהוגדרו בפלטפורמה שהמערכת הציבה בקבוצת הרשאות מסוימת, צריך להפעיל את
getPlatformPermissionsForGroup().
הסתרת חלונות של שכבות-על באפליקציות
כדי לתת למפתחים יותר שליטה על מה שהמשתמשים רואים כשהם משתמשים באפליקציה של המפתח, ב-Android 12 יש אפשרות להסתיר חלונות שכבת-על שנוצרו על ידי אפליקציות עם ההרשאה SYSTEM_ALERT_WINDOW.
אחרי שמצהירים על ההרשאה HIDE_OVERLAY_WINDOWS, האפליקציה יכולה להפעיל את setHideOverlayWindows() כדי לציין שצריך להסתיר את כל החלונות מסוג TYPE_APPLICATION_OVERLAY כשהחלון של האפליקציה עצמה גלוי. אפליקציות עשויות לבחור לעשות זאת כשהן מציגות מסכים רגישים, כמו תהליכי אישור של עסקאות.
באפליקציות שמוצגים בהן חלונות מסוג TYPE_APPLICATION_OVERLAY, כדאי לשקול חלופות שעשויות להתאים יותר לתרחיש לדוגמה, כמו תמונה בתוך תמונה או בועות.
סימון הגנה על הרשאות של חותמים מוכרים
החל מ-Android 12, המאפיין knownCerts של הרשאות ברמת החתימה מאפשר לכם להפנות לתקצירים של אישורי חתימה מוכרים בזמן ההצהרה.
האפליקציה יכולה להצהיר על המאפיין הזה ולהשתמש בדגל knownSigner כדי לאפשר למכשירים ולאפליקציות להעניק הרשאות חתימה לאפליקציות אחרות, בלי שיהיה צורך לחתום על האפליקציות בזמן הייצור והמשלוח של המכשיר.
אימות (attestation) של מאפייני המכשיר
ב-Android 12, יש יותר אפליקציות שיכולות לאמת את מאפייני המכשיר שמופיעים באישור אימות כשהאפליקציות האלה יוצרות מפתח חדש.
החל מ-Android 9 (רמת API 28), בעלי מדיניות מכשיר (DPO) שמשתמשים ב-Keymaster 4.0 ומעלה יכולים לאמת את מאפייני המכשיר באישורי האימות האלה. החל מ-Android 12, כל אפליקציה שמטרגטת את Android 12 (רמת API 31) ומעלה יכולה לבצע את האימות הזה באמצעות השיטה setDevicePropertiesAttestationIncluded().
מאפייני המכשיר שנוצרו כוללים את השדות הבאים של Build:
BRANDDEVICEMANUFACTURERMODELPRODUCT
פעולות מאובטחות בהתראות במסך הנעילה
החל מ-Android 12, המחלקה Notification.Action.Builder תומכת ב-method setAuthenticationRequired(), שמאפשרת לאפליקציה לדרוש שהמכשיר יהיה פתוח לפני שהאפליקציה מפעילה פעולה מסוימת של התראה. השיטה הזו מוסיפה עוד שכבת אבטחה להתראות במכשירים נעולים.
מחרוזות שניתן להתאים לשוק המקומי עבור BiometricPrompt
ב-Android 12 יש ממשקי API חדשים שעוזרים לשפר את חוויית המשתמש באימות ביומטרי באפליקציה. המחלקה המקוננת החדשה BiometricManager.Strings כוללת את השיטות getButtonLabel(), getPromptMessage() ו-getSettingName(), שמאפשרות לאפליקציה לאחזר תווית כפתור, הודעת בקשה או שם של הגדרת אפליקציה שמותאמים לשוק המקומי וקריאים למשתמש. התוויות האלה מאפשרות ליצור הוראות מדויקות יותר שגלויות למשתמשים וספציפיות לשיטות האימות הביומטרי שבהן משתמשים, כמו "שימוש בפתיחה בזיהוי פנים" או "שימוש בטביעת האצבע כדי להמשיך".
מדיה
המרת קידוד למדיה תואמת
החל מ-Android 12 (רמת API 31), המערכת יכולה להמיר באופן אוטומטי סרטוני HEVC(H.265) ו-HDR (HDR10 ו-HDR10+) שצולמו במכשיר ל-AVC (H.264), פורמט שתואם באופן נרחב לנגנים סטנדרטיים. כך אפשר לנצל את היתרונות של קודקים מודרניים כשהם זמינים, בלי לפגוע בתאימות לאפליקציות ישנות יותר.
פרטים נוספים זמינים במאמר בנושא המרת קידוד למדיה תואמת.
רמת ביצועים
ב-Android 12 יש תקן שנקרא סיווג ביצועים. סיווג הביצועים מציין את יכולות החומרה מעבר לדרישות הבסיסיות של Android. כל מכשיר Android מצהיר על רמת הביצועים שהוא תומך בה. המפתחים יכולים לבדוק את רמת הביצועים של המכשיר בזמן הריצה ולספק חוויות משודרגות שמנצלות את כל היכולות של המכשיר.
לפרטים נוספים, ראו סיווג ביצועים.
שיפורים בקידוד הווידאו
ב-Android 12 מוגדרת קבוצה סטנדרטית של מקשים לשליטה בערך של פרמטר הקוונטיזציה (QP) לקידוד וידאו, וכך המפתחים יכולים להימנע מקוד ספציפי לספק.
המפתחות החדשים זמינים ב-API של MediaFormat וגם ב-NDK Media library.
החל מ-Android 12, מקודדי וידאו אוכפים סף איכות מינימלי. כך המשתמשים לא יחוו איכות נמוכה מאוד כשהם מקודדים סרטונים עם סצנות מורכבות.
מיקוד אודיו
החל מ-Android 12 (רמת API 31), כשאפליקציה מבקשת להתמקד באודיו בזמן שאפליקציה אחרת ממוקדת ומפעילה מדיה, המערכת מחלישה את האפליקציה שמפעילה מדיה.
פרטים נוספים זמינים במאמר מיקוד האודיו ב-Android מגרסה 12 ואילך.
עדכוני MediaDrm
כדי לקבוע אם נדרש רכיב מפענח מאובטח עם ממשקי ה-API הנוכחיים של MediaDrm, צריך לבצע את השלבים הבאים:
- יוצרים
MediaDrm. - פותחים סשן כדי לקבל מזהה סשן.
- יוצרים
MediaCryptoבאמצעות מזהה הסשן. - רוצה להתקשר ל-
MediaCrypto.requiresSecureDecoderComponent(mimeType)?
בעזרת ה-methods החדשים requiresSecureDecoder(@NonNull String mime) ו-requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level), אתם יכולים לקבוע את זה ברגע שאתם יוצרים MediaDrm.
מצלמה
תוספי ספק של Camera2
הרבה מהשותפים שלנו שמייצרים מכשירים פיתחו תוספים מותאמים אישית למצלמה, כמו אפקט בוקה, HDR, מצב לילה ועוד, והם רוצים שהאפליקציות ישתמשו בהם כדי ליצור חוויות ייחודיות במכשירים שלהם. ספריית CameraX כבר תומכת בתוספים האלה של ספקים בהתאמה אישית. ב-Android 12, התוספים האלה של הספק חשופים עכשיו ישירות בפלטפורמה.
התוספת הזו עוזרת לאפליקציות עם הטמעות מורכבות של Camera2 לנצל את היתרונות של תוספי ספקים בלי לבצע שינויים משמעותיים בקוד מדור קודם. ממשקי ה-API של התוספים של Camera2 חושפים בדיוק את אותה קבוצת תוספים כמו ב-CameraX, והם כבר נתמכים בהרבה מכשירים שונים, כך שאפשר להשתמש בהם בלי הגדרות נוספות.
מידע נוסף זמין במאמר CameraExtensionCharacteristics.
תמיכה בחיישן מצלמה Quad Bayer
הרבה מכשירי Android מגיעים היום עם חיישני מצלמה ברזולוציה גבוהה במיוחד, בדרך כלל עם דפוסי Quad או Nona Bayer, שמציעים גמישות רבה מבחינת איכות התמונה והביצועים בתאורה חלשה. ב-Android 12 יש ממשקי API חדשים שמאפשרים לאפליקציות של צד שלישי לנצל את כל היתרונות של החיישנים האלה. ממשקי ה-API החדשים תומכים בהתנהגות הייחודית של החיישנים האלה, ומביאים בחשבון שהם עשויים לתמוך בשילובים ובהגדרות שונות של סטרימינג כשהם פועלים במצב רזולוציה מלאה או "רזולוציה מקסימלית" לעומת מצב "ברירת מחדל".
גרפיקה ותמונות
מתן גישה ישירה לאפליקציות לעקבות של קובצי Tombstone
החל מ-Android 12, אתם יכולים לגשת ל-tombstone של קריסה ברמת שפת המכונה של האפליקציה בתור מאגר אחסון לפרוטוקולים באמצעות השיטה ApplicationExitInfo.getTraceInputStream(). מאגר האחסון לפרוטוקולים עובר סריאליזציה באמצעות הסכימה הזו.
בעבר, הדרך היחידה לקבל גישה למידע הזה הייתה באמצעות Android Debug Bridge (adb).
מידע נוסף זמין במאמר מתן גישה ישירה לאפליקציות לעקבות של קובצי Tombstone
תמיכה בתמונות בפורמט AVIF
ב-Android 12 נוספה תמיכה בתמונות שמשתמשות בפורמט קובץ תמונה AV1 (AVIF). AVIF הוא פורמט קונטיינר לתמונות ולרצפים של תמונות שמקודדים באמצעות AV1. פורמט AVIF מנצל את התוכן המקודד בתוך פריים מדחיסת וידאו. הפורמט הזה משפר באופן משמעותי את איכות התמונה באותו גודל קובץ בהשוואה לפורמטים ישנים יותר של תמונות, כמו JPEG. לעיון מעמיק ביתרונות של הפורמט הזה, קראו את הפוסט בבלוג של ג'ייק ארצ'יבלד.
טשטוש, פילטרים של צבעים ואפקטים אחרים בקלות רבה יותר
ב-Android 12 נוסף ה-API החדש RenderEffect, שמאפשר להחיל אפקטים גרפיים נפוצים כמו טשטוש, מסנני צבע, אפקטים של הצללה ב-Android ועוד על View ועל היררכיות רינדור. אפשר לשלב אפקטים כאפקטים משורשרים (שמורכבים מאפקט פנימי וחיצוני) או כאפקטים מעורבבים. יכול להיות שבמכשירי Android מסוימים לא תהיה תמיכה בתכונה בגלל כוח עיבוד מוגבל.
אפשר גם להחיל אפקטים על RenderNode הבסיסי
של View באמצעות קריאה ל-View.setRenderEffect(RenderEffect).
כדי להטמיע RenderEffect:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
פענוח מקורי של תמונות מונפשות
ב-Android 12, ה-API של NDK
ImageDecoder הורחב
כדי לפענח את כל הפריימים ונתוני התזמון מתמונות
שמשתמשות בפורמטים של קובצי GIF מונפשים
ו-WebP מונפשים. כשה-API הזה הושק ב-Android 11, הוא פענח רק את התמונה הראשונה מאנימציות בפורמטים האלה.
כדאי להשתמש ב-ImageDecoder במקום בספריות של צד שלישי כדי להקטין את גודל ה-APK וליהנות מעדכונים עתידיים שקשורים לאבטחה ולביצועים.
פרטים נוספים על ה-API זמינים במאמרי העזרה של ה-API ובדוגמה ב-GitHub.
קישוריות
איך למנוע מהאפליקציות הנלוות לעבור למצב שינה
כדי לתמוך בצורך של אפליקציות נלוות להמשיך לפעול כדי לנהל את המכשיר, ב-Android 12 יש ממשקי API שמבצעים את הפעולות הבאות:
- להפעיל אפליקציה כשהמכשיר הנלווה נמצא בטווח.
- לוודא שהתהליך ימשיך לפעול כל עוד המכשיר נמצא בטווח.
כדי להשתמש בממשקי ה-API, המכשירים צריכים להיות מחוברים באמצעות שיוך של מכשירים לאפליקציות נלוות. מידע נוסף זמין במאמרים CompanionDeviceManager.startObservingDevicePresence() ו-CompanionDeviceService.onDeviceAppeared().
פרופילים של שיוך מכשירים לאפליקציות נלוות
אפליקציות של שותפים ב-Android 12 (רמת API 31) ומעלה יכולות להשתמש בפרופילים של מכשירים נלווים כשהן מתחברות לשעון. השימוש בפרופיל מפשט את תהליך הרישום, כי הוא מאגד את מתן ההרשאות הספציפיות לסוג המכשיר לשלב אחד.
ההרשאות שכלולות בחבילה ניתנות לאפליקציה הנלווית ברגע שהמכשיר מתחבר, והן נשארות בתוקף רק כל עוד המכשיר משויך. אם תמחקו את האפליקציה או תסירו את השיוך, ההרשאות יוסרו.
מידע נוסף זמין במאמר AssociationRequest.Builder.setDeviceProfile().
שיפורים בהערכת רוחב הפס
ב-Android 12, יכולות הערכת רוחב הפס שסופקו על ידי getLinkDownstreamBandwidthKbps() ו-getLinkUpstreamBandwidthKbps() שופרו גם לקישוריות Wi-Fi וגם לחיבור לרשת סלולרית. הערכים שמוחזרים עכשיו מייצגים את קצב הנתונים הממוצע המשוקלל של המשתמש לאורך זמן לכל ספק או SSID של Wi-Fi, סוג רשת ורמת אות, בכל האפליקציות במכשיר.
כך אפשר לקבל אומדן מדויק ומציאותי יותר של קצב העברת הנתונים הצפוי, לספק אומדנים לגבי הפעלה קרה של האפליקציה, ונדרשים פחות מחזורים בהשוואה לשיטות אחרות לאומדן קצב העברת הנתונים.
שיפורים ב-Wi-Fi Aware (NAN)
ב-Android 12 יש כמה שיפורים ב-Wi-Fi Aware:
- במכשירים עם Android 12 (רמת API 31) ומעלה, אפשר להשתמש בקריאה החוזרת (callback)
onServiceLost()כדי לקבל התראה כשהאפליקציה מאבדת שירות שזוהה, כי השירות הופסק או יצא מהטווח. - האופן שבו מוגדרים כמה נתיבי נתונים (נתיבי נתונים של NAN) משתנה כדי להיות יעיל יותר. בגרסאות קודמות, נעשה שימוש בהודעות L2 כדי להחליף מידע בין המכשירים של היוזמים, מה שגרם לזמן אחזור. במכשירים עם Android מגרסה 12 ואילך, אפשר להגדיר את המשיב (השרת) כך שיקבל כל עמית – כלומר, הוא לא צריך לדעת מראש את פרטי היוזם. כך אפשר להאיץ את ההפעלה של נתיב הנתונים ולאפשר כמה קישורים מנקודה לנקודה באמצעות בקשה אחת לאחזור מהרשת.
- כדי למנוע מהמסגרת לדחות בקשות גילוי או חיבור בגלל מחסור במשאבים, במכשירים עם Android מגרסה 12 ואילך אפשר להפעיל את
WifiAwareManager.getAvailableAwareResources(). ערך ההחזרה של השיטה הזו מאפשר לכם לקבל את מספר נתיבי הנתונים הזמינים, את מספר הסשנים הזמינים לפרסום ואת מספר הסשנים הזמינים להרשמה.
חיבור בו-זמני בין נקודות קצה (P2P) + חיבור לאינטרנט
כשמכשירים עם Android בגרסה 12 (רמת API 31) ומעלה פועלים במכשירים עם תמיכה בחומרה, השימוש בחיבורי P2P לא ינתק את חיבור ה-Wi-Fi הקיים כשיוצרים את החיבור למכשיר השני. כדי לבדוק אם יש תמיכה בתכונה הזו, משתמשים ב-WifiManager.isMultiStaConcurrencySupported().
הפעלת תשלומים דרך NFC כשהמסך כבוי
באפליקציות שמטרגטות את Android 12 ואילך, אפשר להפעיל תשלומים דרך NFC בלי להפעיל את מסך המכשיר, על ידי הגדרת requireDeviceScreenOn לערך false. מידע נוסף על תשלומים דרך NFC כשהמסך כבוי או נעול זמין במאמר התנהגות של מסך כבוי ומסך נעילה.
אחסון
ב-Android 12 נוספו היכולות הבאות לניהול האחסון:
- תמיכה של Media store ב-
MediaDocumentsProviderכשהאפליקציה מאחזרת URI של מדיה ששווה ערך ל-URI של ספק מסמכים נתון. - ספרייה של הקלטות קוליות.
- ההרשאה
MANAGE_MEDIA, שמאפשרת לאפליקציה לבצע פעולות של ניהול מדיה בלי להציג למשתמש תיבת דו-שיח לאישור של כל פעולה. - אפליקציות שיש להן גם את ההרשאה
MANAGE_EXTERNAL_STORAGEוגם את ההרשאהQUERY_ALL_PACKAGES, כמו אפליקציות לניהול קבצים, יכולות להפעיל פעילות מותאמת אישית כדי לנהל את נפח האחסון של אפליקציה אחרת, בתנאי שהאפליקציה האחרת יוצרת את הפעילות המותאמת אישית.
פונקציונליות עיקרית
עדכונים אוטומטיים לאפליקציות
ב-Android 12 נוספה השיטה setRequireUserAction() לאפליקציות שמשתמשות ב-API PackageInstaller.
השיטה הזו מאפשרת לאפליקציות להתקנה לעדכן אפליקציות בלי שהמשתמש יצטרך לאשר את הפעולה.
מידע על ערכת השבבים של המכשיר
ב-Android 12 נוספו שני קבועים ל-android.os.Build שחושפים את פרטי הספק והדגם של ערכת השבבים SoC דרך ה-SDK. כדי לאחזר את המידע הזה, אפשר להפעיל את Build.SOC_MANUFACTURER ואת Build.SOC_MODEL בהתאמה.
עדכונים לממשקי ה-API העיקריים של Java
בעקבות בקשות של מפתחים ושיתוף פעולה איתם, הוספנו ל-Android 12 את ספריות הליבה הבאות:
| כיתה | ממשקי API |
|---|---|
java.lang.Deprecated
|
|
java.lang.Byte
|
|
java.lang.Short
|
|
java.lang.Math
|
|
java.lang.StrictMath
|
|
java.util.Set
|
copyOf()
|
java.util.Map
|
copyOf()
|
java.util.List
|
copyOf()
|
java.time.Duration
|
|
java.time.LocalTime
|