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

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

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

חוויות חדשות

פקדי מכשירים

‫Android 11 כולל API חדש של ControlsProviderService שאפשר להשתמש בו כדי לחשוף אמצעי בקרה למכשירים חיצוניים שמחוברים למכשיר. אמצעי הבקרה האלה מופיעים בקטע אמצעי בקרה למכשיר בתפריט ההפעלה של Android. מידע נוסף זמין במאמר שליטה במכשירים חיצוניים.

פקדי מדיה

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

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

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

מסכים

תמיכה טובה יותר בתצוגות Waterfall

ב-Android 11 יש כמה ממשקי API לתמיכה בתצוגות מפלים, כלומר תצוגות שמקיפות את קצה המכשיר. התצוגות האלה נחשבות לגרסה של תצוגות עם חיתוכי מסך. ה-methods הקיימים של DisplayCutout.getSafeInset…() מחזירים עכשיו את השוליים הפנימיים הבטוחים כדי להימנע מאזורים של מפלים ומחורים. כדי להציג את תוכן האפליקציה באזור של תרשים המפל, צריך לבצע את הפעולות הבאות:

  • כדי לקבל את המידות המדויקות של המפל, אפשר להתקשר למספר DisplayCutout.getWaterfallInsets().

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

חיישן זווית הציר ומכשירים מתקפלים

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

מידע נוסף על מכשירים מתקפלים

שיחות

שיפורים בשיחות

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

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

בועות צ'אט

בועות זמינות עכשיו למפתחים כדי לעזור להם להציג שיחות במערכת. התכונה 'בועות' הייתה תכונה ניסיונית ב-Android 10 שהופעלה דרך אפשרות למפתחים. ב-Android 11, זה כבר לא נדרש.

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

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

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

אינדיקטורים חזותיים של 5G

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

פרטיות

‫Android 11 כולל מספר רב של שינויים והגבלות שמטרתם לשפר את הפרטיות של המשתמשים. מידע נוסף זמין בדף פרטיות.

אבטחה

עדכונים בנושא אימות ביומטרי

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

סוגי אימות

ב-Android 11 הוצג הממשק BiometricManager.Authenticators, שבו אפשר להצהיר על סוגי האימות שהאפליקציה תומכת בהם.

איך קובעים באיזה סוג אימות נעשה שימוש

אחרי שהמשתמש מאומת, אפשר לבדוק אם האימות בוצע באמצעות פרטי כניסה למכשיר או פרטים ביומטריים על ידי קריאה ל-getAuthenticationType().

תמיכה נוספת במפתחות אימות לכל שימוש

ב-Android 11 יש תמיכה נוספת באימות באמצעות מפתחות לאימות לכל שימוש.

שיטות שהוצאו משימוש

השיטות הבאות הוצאו משימוש ב-Android 11:

  • השיטה setDeviceCredentialAllowed().
  • השיטה setUserAuthenticationValidityDurationSeconds().
  • הגרסה העמוסה מדי של canAuthenticate() שלא מקבלת ארגומנטים.

שיתוף מאובטח של מערכי נתונים גדולים

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

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

ביצוע הצפנה מבוססת-קבצים אחרי הפעלה מחדש של OTA ללא פרטי כניסה של משתמש

אחרי שהמכשיר משלים עדכון OTA ומבצע הפעלה מחדש, המפתחות המוצפנים של האישורים (CE) שמוצבים באחסון מוגן באמצעות אישורים זמינים באופן מיידי לפעולות של הצפנה מבוססת-קובץ (FBE). המשמעות היא שאחרי עדכון OTA, האפליקציה יכולה להמשיך פעולות שדורשות את מפתחות ה-CE לפני שהמשתמש מזין את קוד האימות, קו ביטול הנעילה או הסיסמה.

ביצועים ואיכות

ניפוי באגים אלחוטי

ב-Android 11 יש תמיכה בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות ממשק הגישור של Android‏ (adb). לדוגמה, אתם יכולים לפרוס את האפליקציה שניתנת לניפוי באגים למספר מכשירים שמחוברים לרשת אחרת בלי לחבר את המכשיר שלכם פיזית באמצעות USB, ובלי להתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת דרייבר. מידע נוסף מופיע במאמר בנושא הפעלת אפליקציות במכשיר ציוד.

התקנת APK מצטברת באמצעות ADB

התקנה של קובצי APK גדולים (2GB ומעלה) במכשיר יכולה להימשך זמן רב, גם אם בוצע שינוי קטן באפליקציה. התקנה מצטברת של קובצי APK באמצעות ADB (Android Debug Bridge) מאיצה את התהליך הזה. ההתקנה מתבצעת באופן כזה שחלק מקובץ ה-APK מותקן כדי להפעיל את האפליקציה, בזמן שהנתונים שנותרו מועברים ברקע. ‫adb install ישתמש בתכונה הזו באופן אוטומטי אם היא נתמכת על ידי המכשיר ומותקנת אצלך הגרסה העדכנית של SDK Platform-Tools. אם היא לא נתמכת, נעשה שימוש בשיטת ההתקנה שמוגדרת כברירת מחדל.

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

adb install --incremental

לפני שמריצים התקנה מצטברת של APK באמצעות ADB, צריך לחתום על ה-APK וליצור קובץ APK Signature Scheme v4. כדי שהתכונה הזו תפעל, צריך למקם את קובץ החתימה v4 לצד קובץ ה-APK.

זיהוי שגיאות באמצעות כלי הקצאת הזיכרון המקורי

‫GWP-ASan היא תכונה של הקצאת זיכרון נייטיב שעוזרת למצוא באגים מסוג use-after-free ו-heap-buffer-overflow. אפשר להפעיל את התכונה הזו באופן גלובלי או לתהליכי משנה ספציפיים באפליקציה. מידע נוסף זמין במדריך GWP-Asan.

Neural Networks API 1.3

‫Android 11 מרחיבה ומשפרת את ממשק ה-API של רשתות נוירונים (NNAPI).

פעולות חדשות

‫NNAPI 1.3 מציג סוג אופרנד חדש, TENSOR_QUANT8_ASYMM_SIGNED, כדי לתמוך בסכמת הכימות החדשה של TensorFlow Lite.

בנוסף, NNAPI 1.3 כולל את הפעולות החדשות הבאות:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

אמצעי בקרה חדשים ללמידת מכונה

ב-NNAPI 1.3 הוספנו אמצעי בקרה חדשים שיעזרו להפעיל למידת מכונה בצורה חלקה:

NDK Thermal API

כשמכשירים מתחממים מדי, הם עשויים להגביל את המעבד (CPU) או את המעבד הגרפי (GPU), וזה יכול להשפיע על האפליקציות בדרכים לא צפויות. באפליקציות או במשחקים שמשלבים גרפיקה מורכבת, חישובים כבדים או פעילות רשת מתמשכת, סביר יותר שיתגלו בעיות.

אפשר להשתמש ב-NDK Thermal API ב-Android 11 כדי לעקוב אחרי שינויים בטמפרטורה במכשיר, ואז לפעול כדי לשמור על צריכת חשמל נמוכה יותר ועל טמפרטורה נמוכה יותר במכשיר. ממשק ה-API הזה דומה ל-Java Thermal API. אפשר להשתמש בו כדי לקבל התראות על כל שינוי בסטטוס התרמי או כדי לדגום את הסטטוס הנוכחי ישירות.

טקסט וקלט

מעברים משופרים ב-IME

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

כדי להציג IME בזמן שרכיב EditText כלשהו נמצא במוקד, קוראים ל-view.getInsetsController().show(Type.ime()). (אפשר לקרוא לשיטה הזו בכל תצוגה באותה היררכיה כמו EditText שבמוקד, לא צריך לקרוא לה ב-EditText באופן ספציפי). כדי להסתיר את ה-IME, קוראים ל-view.getInsetsController().hide(Type.ime()). כדי לבדוק אם IME גלוי כרגע, אפשר להתקשר אל view.getRootWindowInsets().isVisible(Type.ime()).

כדי לסנכרן את התצוגות של האפליקציה עם ההופעה וההיעלמות של ה-IME, צריך להגדיר מאזין בתצוגה על ידי מתן WindowInsetsAnimation.Callback ל-View.setWindowInsetsAnimationCallback(). (אפשר להגדיר את listener ההודעות הזה בכל תצוגה , לא רק בתצוגה EditText). ה-IME קורא לשיטת onPrepare() של listener ההודעות, ואז קורא ל-onStart() בתחילת המעבר. לאחר מכן, הפונקציה קוראת ל-onProgress() בכל שלב של המעבר. כשהמעבר מסתיים, ה-IME קורא ל- onEnd(). בכל שלב במעבר, אפשר להתקשר למספר WindowInsetsAnimation.getFraction() כדי לברר מה מצב המעבר.

דוגמה לשימוש בממשקי ה-API האלה מופיעה בדוגמת הקוד החדשה של WindowInsetsAnimation.

שליטה באנימציה של IME

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

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

כדי להזיז את ה-IME או סרגל מערכת אחר, קוראים לשיטה controlWindowInsetsAnimation() של בקר:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

עדכונים בספריות ICU

ב-Android 11, חבילת android.icu מעודכנת לגרסה 66 של ספריית ICU, לעומת גרסה 63 ב-Android 10. גרסת הספרייה החדשה כוללת נתוני מיקום מעודכנים של CLDR ומספר שיפורים בתמיכה באינטרנציונליזציה ב-Android.

השינויים הבולטים בגרסאות החדשות של הספרייה כוללים:

  • הרבה ממשקי API לעיצוב תומכים עכשיו בסוג חדש של אובייקט החזרה שמרחיב את FormattedValue.
  • LocaleMatcher API משופר עם מחלקה ליצירת אובייקטים, תמיכה בסוג java.util.Locale ומחלקה של תוצאות שכוללת נתונים נוספים על התאמה.
  • יש עכשיו תמיכה ב-Unicode 13.

מדיה

הקצאת מאגרי נתונים זמניים של MediaCodec

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

כיתות חדשות:
שיטות חדשות:

בנוסף, יש שינויים בהתנהגות של שתי שיטות ב-MediaCodec.Callback():

onInputBufferAvailable()
במקום להפעיל את MediaCodec.getInputBuffer() ואת MediaCodec.queueInputBuffer() עם האינדקס, אם האפליקציות מוגדרות לשימוש ב-Block Model API, הן צריכות להשתמש ב-MediaCodec.getQueueRequest עם האינדקס ולצרף LinearBlock או HardwareBuffer למשבצת.
onOutputBufferAvailable()
במקום להתקשר אל MediaCodec.getOutputBuffer() עם האינדקס, אפליקציות יכולות להשתמש ב-MediaCodec.getOutputFrame() עם האינדקס כדי לקבל את האובייקט OutputFrame עם מידע נוסף ומאגרי LinearBlock/HardwareBuffer.

פענוח עם זמן אחזור קצר ב-MediaCodec

ב-Android 11 יש שיפורים ב-MediaCodec, כדי לתמוך בפענוח עם זמן אחזור נמוך במשחקים ובאפליקציות אחרות בזמן אמת. כדי לבדוק אם קודק תומך בפענוח עם השהיה נמוכה, מעבירים את FEATURE_LowLatency אל MediaCodecInfo.CodecCapabilities.isFeatureSupported().

כדי להפעיל או להשבית את פענוח ההשהיה הנמוכה, מבצעים אחת מהפעולות הבאות:

פונקציית AAudio חדשה AAudioStream_release()

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

הפונקציה החדשה AAudioStream_release() משחררת את הזרם אבל לא סוגרת אותו. כך המשאבים שלה מתפנים והשידור נשאר במצב ידוע. האובייקט נשמר עד שמפעילים את הפונקציה AAudioStream_close().

MediaParser API

MediaParser הוא API חדש ברמה נמוכה לחילוץ מדיה. הוא גמיש יותר מ-MediaExtractor ומספק שליטה נוספת בפונקציונליות של חילוץ מדיה.

לכידת אודיו ממכשיר USB

כשמשתמשים באפליקציה ללא הרשאת RECORD_AUDIO כדי לבקש גישה ישירה למכשיר אודיו USB עם יכולת הקלטת אודיו (כמו אוזניות USB), מוצגת הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה להשתמש במכשיר.UsbManager המערכת מתעלמת מכל אפשרות של 'שימוש תמיד', ולכן המשתמש צריך לאשר את האזהרה ולהעניק הרשאה בכל פעם שאפליקציה מבקשת גישה.

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

גישה למיקרופון במקביל

ב-Android 11 נוספו שיטות חדשות לממשקי ה-API‏ AudioRecord,‏ MediaRecorder ו-AAudioStream. ה-methods האלה מאפשרות להפעיל ולהשבית את היכולת לצלם בו-זמנית, בלי קשר לתרחיש השימוש שנבחר. איך משתפים את קלט האודיו

מתג מעבר למכשיר אחר

ב-Android 11 הוטמעה התנהגות חדשה באפליקציות שמשתמשות בממשקי ה-API של Cast ו-mediarouter.

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

קישוריות

שיפורים ב-Wi-Fi Passpoint

למידע על יכולות Passpoint שנוספו ב-Android 11, ראו Passpoint.

ההרחבה של Wi-Fi Suggestion API

‫Android 11 מרחיבה את Wi-Fi Suggestion API כדי לשפר את היכולות של האפליקציה לניהול רשת, כולל:

  • אפליקציות לניהול קישוריות יכולות לנהל את הרשתות שלהן על ידי מתן אפשרות לשליחת בקשות לניתוק.
  • רשתות Passpoint משולבות ב-API של ההצעות, ואפשר להציע אותן למשתמש.
  • ממשקי Analytics API מאפשרים לכם לקבל מידע על איכות הרשתות שלכם.

עדכונים של CallScreeningService

החל מ-Android 11, ‏ CallScreeningService יכול לבקש מידע על סטטוס האימות (verstat) של STIR/SHAKEN לשיחות נכנסות. המידע הזה מופיע בפרטי השיחה של שיחות נכנסות.

אם לאפליקציה מסוימת יש הרשאה CallScreeningService READ_CONTACTS, היא מקבלת התראה כשיש שיחות נכנסות ממספר שנמצא באנשי הקשר של המשתמש או שיחות יוצאות למספר כזה.

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

עדכונים ב-Mobile API

מידע על תמיכה ב-OMAPI ב-Android 11 ואילך זמין במאמר תמיכה בקורא Open Mobile API.

רשתות VPN עם ביצועים טובים

אפליקציות שמטרגטות לרמת ה-API לטירגוט 30 ומעלה או שפועלות במכשירים שהושקו עם רמת API ‏29 ומעלה יכולות להחיל IKEv2/IPsec על רשתות VPN, גם על רשתות VPN שהוגדרו על ידי המשתמש וגם על רשתות VPN שמבוססות על אפליקציות.

רשתות ה-VPN פועלות באופן מקורי במערכת ההפעלה, ולכן הקוד שנדרש כדי ליצור חיבורי IKEv2/IPsec VPN באפליקציה הוא פשוט יותר.

בקרת גישה לרשת לכל תהליך

מידע על הפעלת גישה לרשת על בסיס כל תהליך זמין במאמר ניהול השימוש ברשת.

אפשר להתקין כמה הגדרות Passpoint עם אותו FQDN

החל מ-Android 11, אפשר להשתמש ב-PasspointConfiguration.getUniqueId() כדי לקבל מזהה ייחודי לאובייקט PasspointConfiguration, וכך לאפשר למשתמשים באפליקציה להתקין כמה פרופילים עם אותו שם דומיין מוגדר במלואו (FQDN).

הפונקציונליות הזו שימושית כשספק פורס יותר משילוב אחד של קוד מדינה של רשת סלולרית (MCC) וקוד רשת לנייד (MNC) ברשת שלו, אבל יש לו רק שם דומיין מלא (FQDN) אחד. ב-Android 11 ומעלה, אפשר להתקין יותר מפרופיל אחד עם אותו FQDN שתואם לרשת כספק הביתי, כשהמשתמש מתקין כרטיס SIM עם MCC או MNC.

תמיכה באנטנת GNSS

ב-Android 11 הוספנו את המחלקה GnssAntennaInfo, שמאפשרת לאפליקציה שלכם להשתמש יותר במיקום ברמת דיוק של סנטימטר, שניתן על ידי מערכת הלוויינים לניווט גלובלי (GNSS).

מידע נוסף זמין במדריך בנושא כיול אנטנה.

גרפיקה

מפענח תמונות NDK

ImageDecoder API של NDK מספק API סטנדרטי לאפליקציות C/C++‎ ל-Android כדי לפענח תמונות ישירות. מפתחי אפליקציות לא צריכים יותר להשתמש בממשקי ה-API של המסגרת (דרך JNI) או בספריות של צד שלישי לפענוח תמונות. מידע נוסף זמין במדריך למפתחים בנושא פענוח תמונות.

Frame rate API

‫Android 11 מספק API שמאפשר לאפליקציות להודיע למערכת על קצב הפריימים המיועד שלהן, כדי לצמצם את הריצוד במכשירים שתומכים בכמה קצבי רענון. מידע על השימוש ב-API הזה זמין במדריך קצב הפריימים.

בקשה לבדיקה של תמיכה בזמן אחזור נמוך

צגים מסוימים יכולים לבצע עיבוד פוסט של גרפיקה, כמו חלק מהצגים החיצוניים והטלוויזיות. העיבוד הזה משפר את הגרפיקה אבל יכול להגדיל את זמן האחזור. מסכים חדשים יותר שתומכים ב-HDMI 2.1 כוללים מצב אוטומטי של השהיה נמוכה (ALLM, שנקרא גם מצב משחק), שממזער את ההשהיה על ידי השבתת העיבוד שאחרי. פרטים נוספים על ALLM זמינים במפרט של HDMI 2.1.

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

כדי להפעיל או להשבית את העיבוד המינימלי שאחרי ההקלטה, קוראים ל-Window.setPreferMinimalPostProcessing() או מגדירים את מאפיין preferMinimalPostProcessing של החלון ל-true. לא כל המסכים תומכים בעיבוד מינימלי אחרי העיבוד הראשוני. כדי לברר אם מסך מסוים תומך בכך, צריך להפעיל את השיטה החדשה Display.isMinimalPostProcessingSupported().

החדרה של שכבת ניפוי באגים בגרפיקה עם ביצועים טובים

אפליקציות יכולות עכשיו לטעון שכבות גרפיות חיצוניות (GLES,‏ Vulkan) לתוך קוד אפליקציית נייטיב כדי לחשוף את אותה פונקציונליות כמו אפליקציה שניתן לבצע ניפוי באגים, אבל בלי לגרום לתקורה בביצועים. התכונה הזו חשובה במיוחד כשיוצרים פרופיל של האפליקציה באמצעות כלים כמו GAPID. כדי ליצור פרופיל לאפליקציה, צריך לכלול את רכיב המטא-נתונים הבא בקובץ המניפסט של האפליקציה במקום להפוך את האפליקציה לניתנת לניפוי באגים:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

תמונות ומצלמה

השתקת הצלילים והרטט של ההתראות במהלך צילום פעיל

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

תמיכה מורחבת במצלמה באמולטור של Android

למידע על התמיכה המורחבת במצלמות באמולטור החל מ-Android 11, אפשר לעיין במאמר בנושא תמיכה במצלמות.

תמיכה בשימוש בו-זמני ביותר ממצלמה אחת

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

כדי לבדוק אם יש תמיכה במכשיר שבו האפליקציה פועלת, משתמשים בשיטות הבאות:

  • getConcurrentCameraIds() מחזירה Set של שילובי מזהי מצלמות שיכולים להזרים נתונים בו-זמנית עם שילובי סטרימינג מובטחים כשהם מוגדרים על ידי אותו תהליך של אפליקציה.
  • isConcurrentSessionConfigurationSupported() שאילתות לגבי האפשרות של מכשירי מצלמה לתמוך בו-זמנית בהגדרות המתאימות של הסשן.

תמיכה משופרת בתמונות HEIF עם כמה מסגרות

החל מ-Android 11, אם קוראים ל-ImageDecoder.decodeDrawable() ומעבירים תמונת HEIF שמכילה רצף של פריימים (כמו אנימציה או צילום רצף), השיטה מחזירה AnimatedImageDrawable שמכיל את כל רצף התמונות. בגרסאות קודמות של Android, ה-method החזיר BitmapDrawable של פריים אחד בלבד.

אם גרפיקת ה-HEIF מכילה כמה פריימים שלא מוצגים ברצף, אפשר לאחזר פריימים בודדים באמצעות הקריאה ל-MediaMetadataRetriever.getImageAtIndex().

נגישות

עדכונים למפתחים של שירותי נגישות

אם יוצרים שירות נגישות בהתאמה אישית, אפשר להשתמש בתכונות הבאות ב-Android 11:

  • ההסבר למשתמשים על שירות נגישות יכול לכלול עכשיו HTML ותמונות, בנוסף לטקסט פשוט. הגמישות הזו מקלה על ההסבר למשתמשי הקצה מה השירות שלכם עושה ואיך הוא יכול לעזור להם.
  • כדי לעבוד עם תיאור של מצב רכיב בממשק משתמש שהוא בעל משמעות סמנטית יותר מ-contentDescription, צריך להפעיל את השיטה getStateDescription().
  • כדי לבקש שאירועי מגע יעקפו את כלי המגע של המערכת, קוראים ל-setTouchExplorationPassthroughRegion(). באופן דומה, כדי לבקש שהתנועות יעקפו את גלאי התנועות של המערכת, צריך להתקשר אל setGestureDetectionPassthroughRegion().
  • אתם יכולים לבקש פעולות של IME, כמו 'הזנה' ו'הבא', וגם צילומי מסך של חלונות שלא מופעל בהם הדגל FLAG_SECURE.

תכונות נוספות

הסיבות ליציאה מתהליך האפליקציה

ב-Android 11 הוצגה השיטה ActivityManager.getHistoricalProcessExitReasons() שמדווחת על הסיבות להפסקות תהליכים מהזמן האחרון. אפליקציות יכולות להשתמש בשיטה הזו כדי לאסוף מידע אבחוני על קריסות, למשל אם סיום התהליך נובע ממקרי ANR, מבעיות בזיכרון או מסיבות אחרות. בנוסף, אפשר להשתמש בשיטה החדשה setProcessStateSummary() כדי לאחסן מידע מותאם אישית על מצב המשתמש לצורך ניתוח מאוחר יותר.

השיטה getHistoricalProcessExitReasons() מחזירה מופעים של המחלקה ApplicationExitInfo, שמכילה מידע שקשור לסיום של תהליך באפליקציה. אפשר להתקשר אל getReason() במופע של המחלקה הזו כדי לגלות למה התהליך של האפליקציה הופסק. לדוגמה, ערך החזרה REASON_CRASH מציין שחריגה לא מטופלת התרחשה באפליקציה. אם האפליקציה צריכה להבטיח ייחודיות לאירועי יציאה, היא יכולה לשמור מזהה ספציפי לאפליקציה, כמו ערך hash שמבוסס על חותמת הזמן מהשיטה getTimestamp().

מקורות מידע נוספים

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

טועני משאבים

ב-Android 11 מוצג API חדש שמאפשר לאפליקציות להרחיב באופן דינמי את האופן שבו המערכת מחפשת וטוענת משאבים. המחלקות החדשות של ה-API‏ ResourcesLoader ו- ResourcesProvider אחראיות בעיקר על אספקת הפונקציונליות החדשה. יחד, הם מאפשרים לספק משאבים ונכסים נוספים, או לשנות את הערכים של משאבים ונכסים קיימים.

אובייקטים של ResourcesLoader הם קונטיינרים שמספקים אובייקטים של ResourcesProvider למופע Resources של אפליקציה. בתמורה, אובייקטים של ResourcesProvider מספקים שיטות לטעינת נתוני משאבים מקובצי APK ומטבלאות משאבים.

תרחיש שימוש מרכזי אחד ב-API הזה הוא טעינה מותאמת אישית של נכסים. אפשר להשתמש ב-<0x0A>loadFromDirectory() כדי ליצור ResourcesProvider שמפנה מחדש את הרזולוציה של משאבים ונכסים מבוססי-קובץ, כך שהמערכת תחפש בספרייה ספציפית ולא בקובץ ה-APK של האפליקציה. אפשר לגשת לנכסים האלה באמצעות משפחת השיטות open() ממחלקת ה-API‏ AssetManager, בדיוק כמו לנכסים שכלולים ב-APK.

APK signature scheme v4

ב-Android 11 נוספה תמיכה ב-APK Signature Scheme v4. הפורמט הזה יוצר סוג חדש של חתימה בקובץ נפרד (apk-name.apk.idsig), אבל הוא דומה לפורמטים v2 ו-v3. לא מתבצעים שינויים ב-APK. הסכימה הזו תומכת בהתקנה מצטברת של APK באמצעות ADB, שמאיצה את התקנת ה-APK.

מסנני כוונות דינמיים

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

ב-Android 11 הוצגו קבוצות MIME, רכיב מניפסט חדש שמאפשר לאפליקציה להצהיר על קבוצה דינמית של סוגי MIME במסנן Intent ולשנות אותה באופן פרוגרמטי בזמן הריצה. כדי להשתמש בקבוצת MIME, צריך לכלול אלמנט data בקובץ מניפסט של האפליקציה עם המאפיין החדש android:mimeGroup:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

הערך של המאפיין android:mimeGroup הוא מזהה מחרוזת שרירותי שמזהה את קבוצת ה-MIME בזמן הריצה. כדי לגשת לתוכן של קבוצת MIME ולעדכן אותו, צריך להעביר את המזהה שלה לשיטות החדשות הבאות במחלקת PackageManager API:

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

שיפורים במילוי האוטומטי

ב-Android 11 יש שיפורים בשירותי המילוי האוטומטי.

מזהי רמזים ב-AssistStructure.ViewNode

לעתים קרובות, שירותי מילוי אוטומטי מחשבים גיבוב חתימה לתצוגה על סמך המאפיינים של התצוגה. המאפיין view hint הוא מאפיין טוב במיוחד לכלול כשמחשבים גיבוב חתימה, אבל מחרוזת הרמז עשויה להשתנות בהתאם ללוקאל של הטלפון. כדי לפתור את הבעיה הזו, ב-Android 11 הורחבה השיטה AssistStructure.ViewNode עם שיטה חדשה getHintIdEntry(), שמחזירה את מזהה המשאב של טקסט הרמז של תצוגה. השיטה הזו מספקת ערך בלתי תלוי במיקום שאפשר להשתמש בו כדי לחשב גיבובים של חתימות.

אירועים שמוצגים במערכי נתונים

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

שילוב של IME

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

שיתוף נתונים עם שירות ללכידת תוכן

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

כדי להפוך את הנתונים מהאפליקציה לזמינים לשירות ללכידת תוכן, צריך להפעיל את השיטה shareData() במופע של ContentCaptureManager. אם המערכת מאשרת את הבקשה לשיתוף הנתונים, האפליקציה מקבלת מתאר קובץ לקריאה בלבד לשיתוף עם שירות לכידת התוכן.