סקירה כללית על תכונות וממשקי API

מערכת 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.

Material You

שיפורים בווידג'טים

ב-Android 12 ערכנו שדרוג לממשק ה-API הקיים של ווידג'טים כדי לשפר את חוויית המשתמש והמפתחים בפלטפורמה ובמרכזי האפליקציות. יצרנו מדריך שיעזור לכם לוודא שהווידג'ט תואם ל-Android 12 ולרענן אותו בתכונות חדשות.

למידע נוסף, ראו שיפורים בווידג'טים של Android 12.

הוספת תוכן עשיר

ב-Android 12 יש ממשק API מאוחד חדש שמאפשר לאפליקציה לקבל תוכן עשיר מכל מקור זמין: לוח, מקלדת או גרירה ושחרור.

מידע נוסף זמין במאמר קבלת תוכן עשיר.

API של מסכי פתיחה לאפליקציה

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

ממשקי API עם פינות מעוגלות

ב-Android 12 נוספו הנכסים RoundedCorner ו-WindowInsets.getRoundedCorner(int position), שמספקים את הרדיוס ואת נקודת המרכז של פינות מעוגלות.

מידע נוסף זמין במאמר פינות מעוגלות.

חוויות מגע עשירות

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

אפקטים של אקטואטור

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

אפקטים של משוב מישוש שמשולב עם אודיו

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

מידע נוסף מופיע במשאבי העזרה של HapticGenerator.

AppSearch

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

תרשים שממחיש הוספה לאינדקס וחיפוש ב-AppSearch

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

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

מצב משחק

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

מידע נוסף זמין במאמר בנושא מצב משחק.

המלצות ושיפורים לגבי התכונה 'תמונה בתוך תמונה' (PiP)

ב-Android 12 נוספו השיפורים הבאים למצב 'תמונה בתוך תמונה':

תמיכה בתנועות חדשות של 'תמונה בתוך תמונה'

ב-Android 12 יש עכשיו תמיכה בהסתרה של חלון PiP וביצוע תנועות כדי להתקרב או להתרחק:

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

  • המשתמש יכול עכשיו לשנות את גודל החלון של 'תמונה בתוך תמונה' באמצעות תנועת צביטה לשינוי מרחק התצוגה.

ב-Android 12 הוספנו שיפורים משמעותיים במראה של המעברים האנימציה בין מסך מלא לחלונות 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, ההתנהגות הקיימת מאוחדת כדי למשתמשים יהיה קל יותר לבצע פקודות ניווט באמצעות תנועות בזמן מצב immersive. בנוסף, ב-Android 12 יש התנהגות תאימות לאחור למצב 'הקשה ביד אחת'.

שיתוף כתובות URL מהפריטים האחרונים (Pixel בלבד)

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

מידע נוסף זמין במאמר הפעלת שיתוף של כתובות URL מהרשימה 'מהזמן האחרון'.

אבטחה ופרטיות

מרכז בקרת הפרטיות

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

במכשירים נתמכים עם 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 כדי לאפשר למכשירים ולאפליקציות להעניק הרשאות חתימה לאפליקציות אחרות, בלי צורך לחתום על האפליקציות בזמן ייצור המכשיר ושליחתו.

אימות של מאפייני המכשיר

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

החל מגרסה Android 9 (רמת API 28), בעלי מדיניות המכשיר (DPO) שמשתמשים ב-Keymaster 4.0 ואילך יכולים לאמת את מאפייני המכשיר באישורי האימות האלה. החל מ-Android 12, כל אפליקציה שמטרגטת את Android 12 (רמת API 31) ואילך יכולה לבצע את האימות הזה באמצעות השיטה setDevicePropertiesAttestationIncluded().

מאפייני המכשיר שנוצרים כוללים את השדות Build הבאים:

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

פעולות מאובטחות של התראות במסך הנעילה

החל מ-Android 12, הכיתה Notification.Action.Builder תומכת בשיטה setAuthenticationRequired(), שמאפשרת לאפליקציה לדרוש שהמכשיר יהיה פתוח לפני שהיא מפעילה פעולה מסוימת בהתראה. השיטה הזו עוזרת להוסיף עוד שכבת אבטחה להתראות במכשירים נעולים.

מחרוזות שניתן להתאים לשוק המקומי עבור BiometricPrompt

ב-Android 12 יש ממשקי API חדשים שיעזרו לכם לשפר את חוויית המשתמש של אימות הביומטריה באפליקציה. הכיתה החדשה בתצוגת עץ BiometricManager.Strings כוללת את השיטות getButtonLabel(),‏ getPromptMessage() ו-getSettingName(), שמאפשרות לאפליקציה לאחזר תווית לחצן, הודעת הנחיה או שם של הגדרת אפליקציה שמתאימים לקריאה על ידי משתמשים ומותאמים לאזור שלהם. אפשר להשתמש בתוויות האלה כדי ליצור הוראות מדויקות יותר למשתמשים, שספציפיות לשיטות האימות הביומטרי שבהן נעשה שימוש, כמו 'שימוש בפתיחה ע"י זיהוי הפנים' או 'המשך השימוש בטביעת האצבע'.

זיהוי פישינג באפליקציות הודעות (Pixel בלבד)

משתמשים רואים הודעה כזו כשמזוהה הודעה חשודה.

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

  • בקשות חשודות, כמו שליחת קוד, כסף או בקשות דומות
  • כתובות URL לא מהימנות
  • קבצים מצורפים זדוניים
  • קישורים לאפליקציות זדוניות

בנוסף לאזהרת המשתמש, שכבת-העל מאפשרת למשתמש לדווח על הודעה חשודה ולספק משוב לגבי אזהרות שהמערכת יצרה.

מפתחים יכולים לבטל את ההסכמה לשימוש בתכונה הזו על ידי הוספת תג מטא-נתונים חדש שכולל את המחרוזת com.google.android.ALLOW_PHISHING_DETECTION לקובצי המניפסט של האפליקציה. לדוגמה:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

מדיה

המרת קידוד למדיה תואמת

החל מ-Android 12 (רמת API 31), המערכת יכולה לבצע המרת קידוד אוטומטית לסרטונים HEVC(H.265) ו-HDR (HDR10 ו-HDR10+ ) ל-AVC (H.264), פורמט שתואם באופן נרחב לנגנים רגילים. כך אפשר להשתמש בקודקים מודרניים כשהם זמינים, בלי להקריב את התאימות לאפליקציות ישנות יותר.

פרטים נוספים זמינים במאמר המרת קידוד של מדיה תואמת.

רמת ביצועים

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

פרטים נוספים זמינים במאמר סיווג הביצועים.

שיפורים בקידוד הווידאו

ב-Android 12 מוגדרת קבוצה רגילה של מפתחות לצורך בקרה על הערך של פרמטר הקידוד (QP) לקידוד וידאו, שמאפשרת למפתחים להימנע משימוש בקוד ספציפי לספק.

המפתחות החדשים זמינים ב-API של MediaFormat וגם בספריית המדיה של NDK.

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

מיקוד אודיו

החל מ-Android 12 (רמת API 31), כשאפליקציה מבקשת מיקוד באודיו בזמן שאפליקציה אחרת מתמקדת במוקד ופועלת, המערכת מפסיקה את הסאונד של האפליקציה שמופעלת.

פרטים נוספים זמינים במאמר מיקוד אודיו ב-Android 12 ואילך.

עדכונים של MediaDrm

כדי לקבוע אם רכיב מפענח מאובטח נדרש בממשקי ה-API הנוכחיים של MediaDrm, צריך לפעול לפי השלבים הבאים:

  1. יוצרים MediaDrm.
  2. פותחים סשן כדי לקבל מזהה סשן.
  3. צריך ליצור MediaCrypto באמצעות מזהה הסשן.
  4. התקשרות אל MediaCrypto.requiresSecureDecoderComponent(mimeType).

בעזרת השיטות החדשות requiresSecureDecoder(@NonNull String mime) ו-requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level), אפשר לקבוע זאת מיד אחרי שיוצרים MediaDrm.

מצלמה

תוספי ספקים של Camera2

רבים משותפי יצרני המכשירים שלנו פיתחו תוספים מותאמים אישית למצלמה, כמו בוקה, HDR, מצב לילה ועוד, שהם רוצים שהאפליקציות ישתמשו בהם כדי ליצור חוויות שונות במכשירים שלהם. ספריית CameraX כבר תומכת בתוספים המותאמים אישית האלה של ספקים. ב-Android 12, תוספי הספקים האלה נחשפים עכשיו ישירות בפלטפורמה.

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

מידע נוסף זמין במאמר CameraExtensionCharacteristics.

תמיכה בחיישן מצלמה בארבעה תדרים

מכשירי Android רבים נמכרים היום עם חיישני מצלמה ברזולוציה גבוהה במיוחד, בדרך כלל עם דפוסי Quad או Nona Bayer, שמספקים גמישות רבה מבחינת איכות התמונה וביצועים בתאורה נמוכה. ב-Android 12 נוספו ממשקי API חדשים לפלטפורמה שמאפשרים לאפליקציות של צד שלישי לנצל את מלוא היתרונות של החיישנים הרב-תכליתיים האלה. ממשקי ה-API החדשים תומכים בהתנהגות הייחודית של החיישנים האלה, ומביאים בחשבון שהם עשויים לתמוך בהגדרות שונות של סטרימינג ובשילובים שונים שלהן כשהם פועלים ברזולוציה מלאה או במצב 'רזולוציה מקסימלית' לעומת מצב 'ברירת המחדל'.

גרפיקה ותמונות

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

החל מ-Android 12, אפשר לגשת ל-tombstone המקומי של קריסה באפליקציה בתור מאגר פרוטוקול באמצעות השיטה ApplicationExitInfo.getTraceInputStream(). מאגר הנתונים הזמני של הפרוטוקול עובר סריאליזציה באמצעות הסכימה הזו. בעבר, הדרך היחידה לקבל גישה למידע הזה הייתה דרך Android Debug Bridge‏ (adb).

מידע נוסף זמין במאמר מתן גישה ישירה לאפליקציות למעקב אחר נתוני tombstone

תמיכה בתמונות AVIF

ב-Android 12 נוספה תמיכה בתמונות שמשתמשות בפורמט קובץ התמונה AV1‏ (AVIF). AVIF הוא פורמט קונטיינר לתמונות ולרצפי תמונות שמקודדים באמצעות AV1. פורמט AVIF מנצל את התוכן המקודד בתוך הפריים מהדחיסה של הווידאו. האפשרות הזו משפרת משמעותית את איכות התמונה באותו גודל קובץ בהשוואה לפורמטים ישנים יותר של תמונות, כמו JPEG. למבט מעמיק על היתרונות של הפורמט הזה, עיינו בפוסט בבלוג של ג'ייק ארצ'יבלד.

טשטוש קל יותר, פילטרים צבעוניים ואפקטים אחרים

ב-Android 12 נוסף ממשק RenderEffect החדש, שמחיל אפקטים גרפיים נפוצים כמו טשטוש, מסנני צבע, אפקטים של הצללה (shader) ב-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, המכשירים שלכם צריכים להיות מחוברים באמצעות ניהול מכשיר Companion. למידע נוסף, ראו CompanionDeviceManager.startObservingDevicePresence() ו-CompanionDeviceService.onDeviceAppeared().

פרופילים של ניהול מכשירים נלווים

תיבת דו-שיח להרשאות שמשתמשת בפרופיל של מכשיר נלווה כדי לבקש מספר הרשאות בבקשה אחת.

אפליקציות שותפות ב-Android 12 (API ברמה 31) ואילך יכולות להשתמש בפרופילים של מכשירי לוויין כשמחברים אותן לשעון. השימוש בפרופיל מפשט את תהליך ההרשמה, כי הוא מאפשר לאסוף את ההרשאות הספציפיות לסוג המכשיר בשלב אחד.

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

מידע נוסף זמין במאמר AssociationRequest.Builder.setDeviceProfile().

שיפורים בהערכת רוחב הפס

ב-Android 12, היכולות להערכת רוחב הפס שמספקות getLinkDownstreamBandwidthKbps() ו-getLinkUpstreamBandwidthKbps() משופרות גם ל-Wi-Fi וגם לקישוריות הסלולרית. הערכים שמוחזרים עכשיו מייצגים את הקצב הממוצע המשוקלל של המשתמש בכל הזמנים לכל ספק או SSID של Wi-Fi, סוג רשת ורמת אות, בכל האפליקציות במכשיר. כך ניתן לקבל הערכה מדויקת ומציאותית יותר של התפוקה הצפויה, לספק הערכות לגבי הפעלה במצב התחלתי (cold start) של האפליקציה ודורש פחות מחזורים בהשוואה לשימוש בשיטות אחרות להערכת התפוקה.

שיפורים ב-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) ואילך פועלים במכשירים עם תמיכה בחומרה, השימוש בחיבורים מקצה לקצה לא ינתק את חיבור ה-Wi-Fi הקיים בזמן יצירת החיבור למכשיר השני. כדי לבדוק אם התכונה הזו נתמכת, משתמשים ב-WifiManager.isMultiStaConcurrencySupported().

איך מפעילים תשלומים ב-NFC כשהמסך כבוי

באפליקציות שמטרגטות את Android 12 ואילך, אפשר להפעיל תשלומים ב-NFC בלי שהמסך של המכשיר יהיה דלוק. לשם כך, מגדירים את requireDeviceScreenOn לערך false. מידע נוסף על תשלומים ב-NFC כשהמסך כבוי או נעול, ראו התנהגות כיבוי מסך ונעילת מסך.

אחסון

ב-Android 12 יש את היכולות הבאות של ניהול האחסון:

פונקציונליות עיקרית

עדכונים אוטומטיים של אפליקציות

ב-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