ב-Android 11 יש תכונות חדשות וממשקי 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 לתמיכה במסכים מסוג waterfall, מסכים שמקיפים את קצה המכשיר. המסכים האלה נחשבים כגרסה של מסכים עם חתכים במסך. השיטות הקיימות של DisplayCutout
.getSafeInset…()
מחזירות עכשיו את ה-safe inset כדי למנוע אזורים של 'מפל מודעות' וגם חתיכות חתוכות.
כדי לעבד את תוכן האפליקציה באזור ה-Waterfall, צריך לבצע את הפעולות הבאות:
כדי לקבל את המימדים המדויקים של התמונה הממוזערת ב-Waterfall, צריך להתקשר למספר
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:
- ה-constructor
BubbleMetadata.Builder()
ללא פרמטרים הוצא משימוש. במקום זאת, צריך להשתמש באחד משני המרכיבים החדשיםBubbleMetadata.Builder(PendingIntent, Icon)
אוBubbleMetadata.Builder(String)
. - כדי ליצור את
BubbleMetadata
מתוך מזהה קיצור דרך, קוראים לפונקציהBubbleMetadata.Builder(String)
. המחרוזת שמועברת צריכה להיות זהה למזהה של קיצור הדרך שקיבלתם ב-Notification.Builder
. - יוצרים סמלי בועות באמצעות
Icon.createWithContentUri()
או באמצעות השיטה החדשהcreateWithAdaptiveBitmapContentUri()
.
אינדיקטורים חזותיים של 5G
מידע על הצגת אינדיקטורים של 5G במכשירים של המשתמשים זמין במאמר איך מודיעים למשתמשים שהם מחוברים לרשת 5G.
פרטיות
ב-Android 11 יש מספר רב של שינויים והגבלות שנועדו לשפר את פרטיות המשתמשים. למידע נוסף, ראו פרטיות.
אבטחה
עדכונים לגבי אימות ביומטרי
כדי לעזור לכם לשלוט ברמת האבטחה של נתוני האפליקציה, ב-Android 11 יש כמה שיפורים באימות הביומטרי. השינויים האלה מופיעים גם בספרייה הביומטרית של Jetpack.
סוגי אימות
ב-Android 11 יש את הממשק BiometricManager.Authenticators
, שאפשר להשתמש בו כדי להצהיר על סוגי האימות שבהם האפליקציה תומכת.
איך בודקים איזה סוג אימות נעשה
אחרי שהמשתמשים מבצעים אימות, אפשר לבדוק אם המשתמש ביצע אימות באמצעות פרטי כניסה של מכשיר או פרטי כניסה ביומטריים באמצעות קריאה ל-getAuthenticationType()
.
תמיכה נוספת במפתחות לאימות לפי שימוש
ב-Android 11 יש תמיכה נוספת באימות באמצעות מפתחות אימות לשימוש.
שיטות שהוצאו משימוש
מערכת Android 11 מוציאה משימוש את השיטות הבאות:
- השיטה
setDeviceCredentialAllowed()
. - השיטה
setUserAuthenticationValidityDurationSeconds()
. - הגרסה עם עומס יתר של
canAuthenticate()
שלא מקבלת ארגומנטים.
שיתוף מאובטח של מערכי נתונים גדולים
במצבים מסוימים, כמו מצבים שכוללים למידת מכונה או הפעלת מדיה, יכול להיות שתרצו להשתמש באותה קבוצת נתונים גדולה כמו באפליקציה אחרת. בגרסאות קודמות של Android, האפליקציה שלכם והאפליקציה השנייה היו צריכות להוריד עותק נפרד של אותה קבוצת נתונים.
כדי לצמצם את עודפות הנתונים, גם ברשת וגם בדיסק, ב-Android 11 אפשר לשמור במטמון במכשיר את מערכי הנתונים הגדולים האלה באמצעות blobs של נתונים משותפים. למידע נוסף על שיתוף של מערכי נתונים, קראו את המדריך המפורט לשיתוף של מערכי נתונים גדולים.
ביצוע הצפנה מבוססת-קבצים אחרי הפעלה מחדש ב-OTA ללא פרטי כניסה של משתמשים
אחרי שהמכשיר משלים עדכון OTA ומופעל מחדש, המפתחות המוצפנים של פרטי הכניסה (CE) שמאוחסנים באחסון שמוגן באמצעות פרטי הכניסה זמינים באופן מיידי לפעולות של הצפנה מבוססת-קובץ (FBE). המשמעות היא שאחרי עדכון OTA, האפליקציה יכולה להמשיך לפעול במשימות שדורשות את מפתחות ה-CE לפני שהמשתמש מזין את קוד האימות, קו ביטול הנעילה או הסיסמה שלו.
ביצועים ואיכות
ניפוי באגים אלחוטי
ב-Android 11 יש תמיכה בפריסה ובניפוי באגים של האפליקציה באופן אלחוטי מתחנת העבודה באמצעות Android Debug Bridge (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 יש הרחבה ושיפור של Neural Networks 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 יש אמצעי בקרה חדשים שעוזרים ללמידת המכונה לפעול בצורה חלקה:
QoS API: ה-API החדש של Quality of Service כולל תמיכה בתעדוף משימות ובתאריכי יעד של משימות ב-NNAPI, עם הפונקציות החדשות הבאות:
קלט/פלט של תחום זיכרון: NNAPI 1.3 כולל תמיכה בתחומי זיכרון כקלט ופלט לביצוע. כך מסירים עותקים מיותרים של אותם נתונים בין רכיבי המערכת השונים, ומשפרים את הביצועים של רשתות הנוירונים ב-Android בזמן הריצה. התכונה הזו מוסיפה סדרה של ממשקי API חדשים של NDK לשימוש עם האובייקטים
ANeuralNetworksMemoryDesc
ו-ANeuralNetworkMemory
, כולל הפונקציות הבאות:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
מידע נוסף זמין בדוגמה לדומיין של זיכרון רשת עצבית.
תמיכה ב-Dependency API ובגדר סנכרון: NNAPI 1.3 כולל תמיכה במחשוב אסינכרוני עם יחסי תלות, מה שמאפשר תקורה קטנה משמעותית כשמפעילים מודלים קטנים עם שרשרת. התכונה הזו מוסיפה את הפונקציות החדשות הבאות:
זרימת בקרה: NNAPI 1.3 כולל תמיכה בזרימת בקרה כללית באמצעות פעולות הגרף החדשות
ANEURALNETWORKS_IF
ו-ANEURALNETWORKS_WHILE
, שמקבלות מודלים אחרים כארגומנטים באמצעות סוג המשתנה החדשANEURALNETWORKS_MODEL
. בנוסף, התכונה הזו מוסיפה את הפונקציות החדשות הבאות:
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())
.
(אפשר לקרוא ל-method הזה בכל תצוגה באותה היררכיה שבה נמצאת ה-EditText
המודגש, ללא צורך לקרוא לה ב-EditText
באופן ספציפי). כדי להסתיר את ה-IME, צריך להפעיל את הפקודה view.getInsetsController().hide(Type.ime())
.
ניתן לבדוק אם IME גלוי כרגע על ידי קריאה ל-view.getRootWindowInsets().isVisible(Type.ime())
.
כדי לסנכרן את התצוגות של האפליקציה עם ההופעה וההיעלמוּת של ה-IME, מגדירים מאזין בתצוגה על ידי העברת WindowInsetsAnimation.Callback
ל-View.setWindowInsetsAnimationCallback()
.
(אפשר להגדיר את המאזין הזה בכל תצוגה, הוא לא חייב להיות EditText
). ה-IME קורא לשיטה onPrepare()
של המאזין, ואז קורא ל-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 או סרגל מערכת אחר, קראו ל-method 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.icu
עודכנה ב-Android 11 לשימוש בגרסה 66 של ספריית ה-ICU, בהשוואה לגרסה 63 ב-Android 10. גרסת הספרייה החדשה כוללת נתוני לוקל של CLDR מעודכנים ומספר שיפורים בתמיכה באינטרנציונליזציה ב-Android.
השינויים העיקריים בגרסאות החדשות של הספריות כוללים:
- הרבה ממשקי API לפורמטים תומכים עכשיו בסוג חדש של אובייקט החזרה שמרחיב את
FormattedValue
. - ה-API של
LocaleMatcher
משופר עם סוג של בונה, תמיכה בסוגjava.util.Locale
וסוג של תוצאה עם נתונים נוספים על התאמה. - עכשיו יש תמיכה ב-Unicode 13.
מדיה
הקצאת מאגרי נתונים זמניים של MediaCodec
Android 11 כולל ממשקי API חדשים של MediaCodec
שמעניקים לאפליקציות שליטה רבה יותר בזמן הקצאת מאגרי קלט ופלט. כך האפליקציה יכולה לנהל את הזיכרון בצורה יעילה יותר.
כיתות חדשות:
שיטות חדשות:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
בנוסף, ההתנהגות של שתי שיטות ב-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()
.
כדי להפעיל או להשבית את פענוח זמן האחזור הנמוך, מבצעים אחת מהפעולות הבאות:
- מגדירים את המפתח החדש
KEY_LOW_LATENCY
ל-0 או ל-1 באמצעותMediaCodec.configure()
. - מגדירים את מפתח הפרמטר החדש
PARAMETER_KEY_LOW_LATENCY
לערך 0 או 1 באמצעותMediaCodec.setParameters()
.
פונקציית AAudio חדשה AAudioStream_release()
הפונקציה AAudioStream_close()
משחררת וסוגרת בו-זמנית שידור אודיו. זה עלול להיות מסוכן. אם תהליך אחר ינסה לגשת לשידור אחרי שהוא נסגר, התהליך ייפול.
הפונקציה החדשה AAudioStream_release()
משחררת את המקור אבל לא סוגרת אותו. כך המשאבים שלו יהיו פנויים והסטטוס של הסטרימינג יהיה ידוע. האובייקט נשאר עד שמפעילים את AAudioStream_close()
.
ממשק API של MediaParser
MediaParser הוא ממשק API חדש ברמה נמוכה לחילוץ מדיה. הוא גמיש יותר מ-MediaExtractor ומספק שליטה נוספת על הפונקציונליות של חילוץ המדיה.
הקלטת אודיו ממכשיר USB
כשאפליקציה ללא ההרשאה RECORD_AUDIO
משתמשת ב-UsbManager
כדי לבקש גישה ישירה למכשיר אודיו מסוג USB עם יכולת הקלטת אודיו (למשל אוזניות USB), מוצגת הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה לשימוש במכשיר. המערכת מתעלמת מכל אפשרות של 'שימוש תמיד', ולכן המשתמש צריך לאשר את האזהרה ולהעניק הרשאה בכל פעם שאפליקציה מבקשת גישה.
כדי למנוע את ההתנהגות הזו, האפליקציה צריכה לבקש את ההרשאה 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 משולבות ב-Suggestion API וניתן להציע אותן למשתמש.
- ממשקי ה-API של Analytics מאפשרים לכם לקבל מידע על איכות הרשתות שלכם.
עדכונים של CallScreeningService
החל מ-Android 11, CallScreeningService יכול לבקש מידע על סטטוס האימות STIR/SHAKEN (verstat) עבור שיחות נכנסות. המידע הזה מופיע בפרטי השיחה של שיחות נכנסות.
אם CallScreeningService
מחזיק בהרשאה READ_CONTACTS
, האפליקציה תקבל התראה כשיהיו שיחות נכנסות ממספר באנשי הקשר של המשתמש או כשיוצאות למספר הזה.
מידע נוסף זמין במאמר מניעת זיופים של מזהה מבצע השיחה.
עדכונים של Open Mobile API
מידע על תמיכה ב-OMAPI ב-Android 11 ואילך זמין במאמר תמיכה בקורא של Open Mobile API.
רשתות VPN יעילות
אפליקציות שמטרגטות את רמת ה-API 30 ומעלה או שפועלות במכשירים שהושקו ב-API ברמה 29 ומעלה יכולות להחיל את IKEv2/IPsec על 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
NDK ImageDecoder
API מספק API סטנדרטי לאפליקציות Android C/C++ לפענוח ישירות של תמונות. מפתחי אפליקציות לא צריכים יותר להשתמש בממשקי ה-API של framework (דרך 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>
תמונות ומצלמה
השתקת הצלילים והרטט של ההתראות במהלך הצילום הפעיל
החל מגרסה 11 של Android, כשמשתמשים באופן פעיל במצלמה, אפשר להשתיק באפליקציה רק את הרטט, את הצלילים והרטט או את שניהם באמצעות 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, כמו 'enter' ו'next', וגם צילומי מסך של חלונות שלא מפעילים את הדגל
FLAG_SECURE
.
תכונות נוספות
סיבות ליציאה מתהליך האפליקציה
ב-Android 11 מופיעה השיטה ActivityManager.getHistoricalProcessExitReasons()
, שמדווחת על הסיבות לסגירת תהליכים מהזמן האחרון. אפליקציות יכולות להשתמש בשיטה הזו כדי לאסוף פרטי אבחון של קריסות. למשל, אם סיום התהליך נובע ממקרי ANR, מבעיות בזיכרון או מסיבות אחרות.
בנוסף, אפשר להשתמש בשיטה החדשה setProcessStateSummary()
כדי לאחסן מידע על מצב בהתאמה אישית לצורך ניתוח מאוחר יותר.
השיטה getHistoricalProcessExitReasons()
מחזירה מופעים של המחלקה ApplicationExitInfo
, שמכילה מידע שקשור לסיום של תהליך אפליקציה. באמצעות קריאה אל
getReason()
במופע של הכיתה הזו, אפשר להבין למה התהליך של האפליקציה הופסק. לדוגמה, ערך החזרה של REASON_CRASH
מציין שהתרחשה באפליקציה חריגה שלא טופלה. אם האפליקציה צריכה לוודא שהאירועים של היציאה ייחודיים, היא יכולה לשמור מזהה ספציפי לאפליקציה, כמו ערך גיבוב שמבוסס על חותמת הזמן מהשיטה getTimestamp()
.
מקורות מידע נוספים
למידע נוסף, אפשר לקרוא את המאמר על הכלים החדשים של Android 11 לשיפור הפרטיות והיציבות של אפליקציות ב-Medium.
טעינת משאבים
ב-Android 11 נוסף ממשק API חדש שמאפשר לאפליקציות להרחיב באופן דינמי את האופן שבו מתבצע החיפוש והטעינה של המשאבים. הכיתות החדשות של ה-API ResourcesLoader
ו-ResourcesProvider
אחראיות בעיקר על הפונקציונליות החדשה. יחד, הם מספקים את היכולת לספק משאבים ונכסים נוספים, או לשנות את הערכים של משאבים ונכסים קיימים.
אובייקטים מסוג ResourcesLoader
הם קונטיינרים שמספקים אובייקטים של ResourcesProvider
למכונה של Resources
של האפליקציה. אובייקטים מסוג ResourcesProvider
מספקים שיטות לטעינה של נתוני משאבים מקובצי APK וטבלאות משאבים.
אחד מהתרחישים לדוגמה העיקריים לשימוש ב-API הזה הוא טעינת נכסים מותאמים אישית. אפשר להשתמש ב-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 דינמיים
כדי לקבל כוונות, האפליקציה צריכה להצהיר בזמן הידור על סוגי הנתונים שהיא יכולה לקבל, על ידי הגדרת מסנן כוונות במניפסט של האפליקציה. ב-Android 10 ובגרסאות ישנות יותר, לאפליקציות אין אפשרות לשנות את מסנני הכוונה שלהן בזמן הריצה. זו בעיה לאפליקציות של וירטואליזציה (כמו מכונות וירטואליות ומחשבים מרוחקים), כי אין להן דרך לדעת בדיוק איזו תוכנה המשתמש יטמיע בתוכן.
ב-Android 11 מופיעות קבוצות MIME, רכיב מניפסט חדש שמאפשר לאפליקציה להצהיר על קבוצה דינמית של סוגי MIME במסנן Intent ולשנות אותה באופן פרוגרמטי בזמן הריצה. כדי להשתמש בקבוצת MIME, צריך לכלול אלמנט נתונים במניפסט של האפליקציה עם המאפיין החדש 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 יש שיפורים בשירותי המילוי האוטומטי.
מזהי רמזים ב-AssistAssisture.ViewNode
במקרים רבים, שירותי מילוי אוטומטי יכולים לחשב גיבוב חתימה בתצוגה מפורטת על סמך המאפיינים של התצוגה. הטיפ להצגה הוא מאפיין טוב במיוחד שאפשר לכלול בחישוב גיבוב החתימה, אבל מחרוזת הטיפ עשויה להשתנות בהתאם לאזור הזמן והשפה של הטלפון. כדי לפתור את הבעיה הזו, מערכת Android 11 מרחיבה את AssistStructure.ViewNode
באמצעות method חדשה getHintIdEntry()
, שמחזירה את מזהה המשאב של טקסט הרמז של תצוגה. השיטה הזו מספקת ערך שלא תלוי באזור גיאוגרפי, שאפשר להשתמש בו כדי לחשב גיבוב חתימות.
מערכי נתונים שמוצגים בהם אירועים
כדי לעזור לשירותי מילוי אוטומטי לשפר את ההצעות שלהם, ב-Android 11 יש דרך לזהות מקרים שבהם שירות מילוי אוטומטי הציג מערכי נתונים אבל המשתמש לא בחר אף אחד מהם. ב-Android 11, FillEventHistory
מדווח על סוג אירוע חדש TYPE_DATASETS_SHOWN
. FillEventHistory
רושם אירוע מהסוג הזה בכל פעם ששירות המילוי האוטומטי מציג למשתמש מערך נתונים אחד או יותר. שירותי מילוי אוטומטי יכולים להשתמש באירועים האלה בשילוב עם האירוע הקיים TYPE_DATASET_SELECTED
כדי לקבוע אם המשתמש בחר באחת מאפשרויות המילוי האוטומטי שסופקו.
שילוב IME
מקלדות ורכיבי IME אחרים יכולים עכשיו להציג הצעות למילוי אוטומטי בתוך השורה, בשורת הצעות או בממשק דומה, במקום בתפריט נפתח. כדי להגן על מידע רגיש כמו סיסמאות ומספרי כרטיסי אשראי, ההצעות מוצגות למשתמש אבל לא ידועות ל-IME עד שהמשתמש בוחר אחת מהן. במאמר שילוב מילוי אוטומטי עם מקלדות מוסבר איך תוכנות IME ומנהלי סיסמאות יכולים לתמוך בתכונה הזו.
שיתוף נתונים עם שירות תיעוד התוכן
החל מ-Android 11, האפליקציה יכולה לשתף נתונים עם שירות תיעוד התוכן של המכשיר. בעזרת היכולת הזו, קל יותר למכשיר לספק מידע מודיעיני בהקשר, למשל הצגת שם השיר שמתנגן כרגע בסביבת המשתמש.
כדי שהנתונים מהאפליקציה יהיו זמינים לשירות לכידת התוכן, צריך לבצע קריאה ל-method shareData()
במכונה של ContentCaptureManager
. אם המערכת תאשר את בקשת שיתוף הנתונים, האפליקציה תקבל מתאר קובץ לכתיבה בלבד כדי לשתף עם שירות צילום התוכן.