ב-Android 11 יש תכונות וממשקי API חדשים ומעולים למפתחים. בקטעים הבאים מוסבר על התכונות של האפליקציות ואיך להתחיל להשתמש בממשקי ה-API שקשורים אליהן.
לרשימה מפורטת של ממשקי API חדשים, ששונו או שהוסרו, קראו את דוח ההבדלים ב-API. לפרטים על ממשקי API חדשים, אפשר לעיין במאמרי העזרה של ה-API ל-Android – ממשקי 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:
- ה-constructor
BubbleMetadata.Builder()ללא פרמטרים הוצא משימוש. במקום זאת, השתמשו באחד משני ה-constructors החדשים:BubbleMetadata.Builder(PendingIntent, Icon)אוBubbleMetadata.Builder(String). - יוצרים
BubbleMetadataממזהה של קיצור דרך באמצעות קריאה ל-BubbleMetadata.Builder(String). המחרוזת שמועברת צריכה להתאים למזהה קיצור הדרך שסופק ל-Notification.Builder. - יוצרים סמלי בועה באמצעות
Icon.createWithContentUri()או באמצעות השיטה החדשהcreateWithAdaptiveBitmapContentUri().
אינדיקטורים חזותיים של 5G
למידע על הצגת אינדיקטורים של 5G במכשירי המשתמשים, ראו הודעה למשתמשים כשהם מחוברים ל-5G.
פרטיות
ב-Android 11 יש הרבה שינויים והגבלות שנועדו לשפר את פרטיות המשתמשים. מידע נוסף זמין בדף פרטיות.
אבטחה
עדכונים לגבי אימות ביומטרי
כדי לעזור לכם לשלוט ברמת האבטחה של נתוני האפליקציה, ב-Android 11 יש כמה שיפורים באימות הביומטרי. השינויים האלה מופיעים גם בספריית Jetpack Biometric.
סוגי אימות
ב-Android 11 נוסף הממשק BiometricManager.Authenticators, שמאפשר להצהיר על סוגי האימות שהאפליקציה תומכת בהם.
איך בודקים באיזה סוג אימות השתמשתם
אחרי שהמשתמש מאמת את הזהות, אפשר לבדוק אם הוא השתמש בפרטי כניסה של המכשיר או בפרטי כניסה ביומטריים באמצעות הפעלת getAuthenticationType().
תמיכה נוספת במפתחות אימות לכל שימוש
ב-Android 11 יש תמיכה רחבה יותר באימות באמצעות מפתחות auth-per-use.
שיטות שהוצאו משימוש
ב-Android 11, השיטות הבאות הוצאו משימוש:
- השיטה
setDeviceCredentialAllowed(). - השיטה
setUserAuthenticationValidityDurationSeconds(). - הגרסה העמוסה של
canAuthenticate()שלא מקבלת ארגומנטים.
שיתוף מאובטח של קבוצות נתונים גדולות
במצבים מסוימים, כמו אלה שכוללים למידת מכונה או הפעלת מדיה, יכול להיות שהאפליקציה שלכם תצטרך להשתמש באותה קבוצת נתונים גדולה כמו אפליקציה אחרת. בגרסאות קודמות של Android, האפליקציה שלכם ואפליקציה אחרת היו צריכות להוריד עותק נפרד של אותה קבוצת נתונים.
כדי לצמצם את יתירות הנתונים ברשת ובדיסק, ב-Android 11 אפשר לשמור את מערכי הנתונים הגדולים האלה במטמון במכשיר באמצעות אובייקטים גדולים של נתונים משותפים. למידע נוסף על שיתוף מערכי נתונים, קראו את המדריך המפורט לשיתוף מערכי נתונים גדולים.
ביצוע הצפנה המבוססת על קבצים (FBE) אחרי הפעלה מחדש של OTA ללא פרטי כניסה של משתמש
אחרי שהמכשיר משלים עדכון OTA ומופעל מחדש, המפתחות של Credential Encrypted (CE) שמוצבים באחסון שמוגן באמצעות פרטי כניסה זמינים באופן מיידי לפעולות של הצפנה מבוססת-קובץ (FBE). כלומר, אחרי עדכון OTA, האפליקציה יכולה להמשיך בפעולות שדורשות את מפתחות ה-CE לפני שהמשתמש מזין את קוד האימות, קו פתיחת הנעילה או הסיסמה.
ביצועים ואיכות
ניפוי באגים אלחוטי
ב-Android 11 אפשר לפרוס את האפליקציה ולנפות בה באגים באופן אלחוטי מתחנת העבודה באמצעות ממשק הגישור של Android (ADB). לדוגמה, אתם יכולים לפרוס את האפליקציה שניתן לבצע בה ניפוי באגים בכמה מכשירים שמחוברים לרשת אחרת, בלי לחבר פיזית את המכשיר באמצעות USB ולהתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן. מידע נוסף על הפעלת אפליקציות במכשיר חומרה
התקנה מצטברת של APK באמצעות ADB
התקנה של קובצי APK גדולים (יותר מ-2GB) במכשיר יכולה להימשך הרבה זמן, גם אם בוצע רק שינוי קטן באפליקציה. התקנה מצטברת של קובצי APK באמצעות ADB (גשר ניפוי באגים של Android) מאיצה את התהליך הזה על ידי התקנה של חלק מקובץ ה-APK שמספיק כדי להפעיל את האפליקציה, בזמן ששאר הנתונים מועברים בסטרימינג ברקע. adb install תשתמש בתכונה הזו באופן אוטומטי אם המכשיר תומך בה והתקנתם את הגרסה העדכנית של SDK Platform-Tools. אם היא לא נתמכת, המערכת תשתמש בשיטת ההתקנה שמוגדרת כברירת מחדל בלי להציג הודעה.
כדי להשתמש בתכונה, משתמשים בפקודת adb הבאה. אם המכשיר לא תומך בהתקנה מצטברת, הפקודה נכשלת ומוצג הסבר מפורט.
adb install --incremental
לפני שמריצים התקנה מצטברת של APK באמצעות ADB, צריך לחתום על ה-APK וליצור קובץ APK Signature Scheme v4. כדי שהתכונה הזו תפעל, צריך למקם את קובץ החתימה בגרסה 4 לצד ה-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_LSTMIFWHILEELUHARD_SWISHFILLRANK
אמצעי בקרה חדשים ללמידת מכונה
ב-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 וב-sync fence: ב-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()).
(אפשר לקרוא לשיטה הזו בכל תצוגה באותה היררכיה כמו ה-EditText שבמיקוד, לא צריך לקרוא לה ספציפית ב-EditText). כדי להסתיר את ה-IME, מפעילים את view.getInsetsController().hide(Type.ime()).
כדי לבדוק אם עורך שיטות הקלט (IME) גלוי כרגע, אפשר להפעיל את view.getRootWindowInsets().isVisible(Type.ime()).
כדי לסנכרן את התצוגות של האפליקציה עם ההופעה וההיעלמות של ה-IME, מגדירים מאזין בתצוגה על ידי הוספת WindowInsetsAnimation.Callback ל-View.setWindowInsetsAnimationCallback().
(אפשר להגדיר את המאזין הזה בכל תצוגה, לא רק ב-EditText.)
ה-IME קורא ל-method onPrepare() של המאזין, ואז קורא ל-onStart() בתחילת המעבר. ואז קורא לפונקציה onProgress() בכל שלב במעבר. כשהמעבר מסתיים, ה-IME מפעיל את onEnd().
בכל שלב במעבר, אתם יכולים לבדוק את ההתקדמות שלו באמצעות קריאה ל-WindowInsetsAnimation.getFraction().
דוגמה לשימוש בממשקי ה-API האלה מופיעה בדוגמת הקוד החדשה של WindowInsetsAnimation.
שליטה באנימציה של עורך שיטות הקלט (IME)
אתם יכולים גם לשלוט באנימציה של ה-IME או באנימציה של סרגל מידע אחר, כמו סרגל הניווט. כדי לעשות את זה, קודם צריך להפעיל את setOnApplyWindowInsetsListener() כדי להגדיר מאזין חדש לשינויים ב-inset של החלון:
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. - ה-API של
LocaleMatcherשופר באמצעות מחלקת builder, תמיכה בסוגjava.util.Localeומחלקת result שכוללת נתונים נוספים על התאמה. - עכשיו יש תמיכה ב-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().
MediaParser API
MediaParser הוא ממשק API חדש ברמה נמוכה לחילוץ מדיה. הוא גמיש יותר מ-MediaExtractor ומספק שליטה נוספת על פונקציונליות החילוץ של המדיה.
הקלטת אודיו מהתקן USB
כשאפליקציה בלי ההרשאה RECORD_AUDIO משתמשת ב-UsbManager כדי לבקש גישה ישירה למכשיר אודיו בחיבור USB עם יכולת הקלטת אודיו (כמו אוזניות USB), מופיעה הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה להשתמש במכשיר. המערכת מתעלמת מכל אפשרות של "שימוש קבוע", כך שהמשתמש חייב לאשר את האזהרה ולתת הרשאה בכל פעם שאפליקציה מבקשת גישה.
כדי למנוע את ההתנהגות הזו, האפליקציה צריכה לבקש את ההרשאה RECORD_AUDIO.
גישה בו-זמנית למיקרופון
ב-Android 11 נוספו שיטות חדשות לממשקי ה-API של AudioRecord, MediaRecorder ו-AAudioStream. ה-methods האלה מפעילות ומשביתות את היכולת לצלם בו-זמנית, בלי קשר לתרחיש לדוגמה שנבחר. מידע נוסף על שיתוף קלט אודיו
מתג מעבר למכשיר אחר
ב-Android 11 יש התנהגות חדשה לאפליקציות שמשתמשות בממשקי ה-API של Cast ו-MediaRouter.
בנוסף לאפשרויות ההעברה שמופיעות באפליקציה, אפשרויות ההחלפה מופיעות גם בנגן המדיה של המערכת. כך המשתמשים יכולים לעבור בצורה חלקה בין מכשירים כשהם משנים את הקשרי הצפייה וההאזנה שלהם, למשל צפייה בסרטון במטבח לעומת בטלפון, או האזנה לאודיו בבית או ברכב. מתג המעבר למכשיר אחר
קישוריות
שיפורים ב-Wi-Fi Passpoint
למידע על יכולות Passpoint שנוספו ב-Android 11, ראו Passpoint.
Wi-Fi Suggestion API מורחב
ב-Android 11, Wi-Fi Suggestion API הורחב כדי לשפר את יכולות ניהול הרשת של האפליקציה, כולל:
- אפליקציות לניהול קישוריות יכולות לנהל את הרשתות שלהן על ידי אישור בקשות ניתוק.
- רשתות Passpoint משולבות ב-Suggestion API ואפשר להציע אותן למשתמש.
- ממשקי Analytics API מאפשרים לכם לקבל מידע על איכות הרשתות שלכם.
עדכונים ב-CallScreeningService
החל מ-Android 11, אפשר לבקש מ-CallScreeningService מידע על סטטוס האימות (verstat) של STIR/SHAKEN לשיחות נכנסות. המידע הזה מופיע בפרטי השיחה של שיחות נכנסות.
אם ל-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>
תמונות ומצלמה
השתקת הצלילים והרטט של ההתראות בזמן צילום פעיל
החל מ-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), כמו "Enter" ו"הבא", וגם צילומי מסך של חלונות שלא מפעילים את הדגל
FLAG_SECURE.
תכונות נוספות
הסיבות ליציאה מתהליך האפליקציה
ב-Android 11 נוספה השיטה ActivityManager.getHistoricalProcessExitReasons(), שמדווחת על הסיבות לסגירת תהליכים שהתרחשו לאחרונה. אפליקציות יכולות להשתמש בשיטה הזו כדי לאסוף מידע לאבחון קריסות, למשל אם סיום התהליך נגרם בגלל מקרי ANR, בעיות בזיכרון או סיבות אחרות.
בנוסף, אתם יכולים להשתמש ב-method החדש setProcessStateSummary() כדי לאחסן מידע על מצב בהתאמה אישית לניתוח בשלב מאוחר יותר.
ה-method getHistoricalProcessExitReasons() מחזירה מופעים של המחלקה ApplicationExitInfo, שמכילה מידע שקשור לסיום התהליך של האפליקציה. אפשר להפעיל את getReason() במופע של המחלקה הזו כדי לגלות למה התהליך של האפליקציה הופסק. לדוגמה, ערך החזרה REASON_CRASH מציין שהתרחשה חריגה לא מטופלת באפליקציה. אם האפליקציה צריכה להבטיח ייחודיות לאירועי יציאה, היא יכולה לשמור מזהה ספציפי לאפליקציה, כמו ערך גיבוב (hash) שמבוסס על חותמת הזמן מהשיטה getTimestamp().
מקורות מידע נוספים
מידע נוסף זמין במאמר כלים חדשים ב-Android 11 לשיפור הפרטיות והיציבות של אפליקציות ב-Medium.
טועני משאבים
ב-Android 11 יש API חדש שמאפשר לאפליקציות להרחיב באופן דינמי את האופן שבו משאבים נטענים ומבוצע חיפוש שלהם. הממשקים החדשים של ה-API,
ResourcesLoader
ו-
ResourcesProvider,
אחראים בעיקר על הפונקציונליות החדשה. ביחד, הם מאפשרים לספק משאבים ונכסים נוספים, או לשנות את הערכים של משאבים ונכסים קיימים.
אובייקטים מסוג ResourcesLoader הם קונטיינרים שמספקים אובייקטים מסוג ResourcesProvider למכונה Resources של אפליקציה. בתורם, אובייקטים של ResourcesProvider מספקים שיטות לטעינת נתוני משאבים מקובצי APK ומטבלאות משאבים.
אחד מתרחישי השימוש העיקריים ב-API הזה הוא טעינת נכסים בהתאמה אישית. אפשר להשתמש ב-loadFromDirectory() כדי ליצור ResourcesProvider שמפנה את הרזולוציה של משאבים ונכסים שמבוססים על קבצים, כך שהיא תחפש בספרייה ספציפית במקום ב-APK של האפליקציה. אפשר לגשת לנכסים האלה באמצעות משפחת השיטות open() מהמחלקה AssetManager ב-API, בדיוק כמו עם נכסים שמצורפים ל-APK.
סכימת חתימה של APK בגרסה 4
ב-Android 11 נוספה תמיכה ב-APK Signature Scheme v4. הסכימה הזו יוצרת סוג חדש של חתימה בקובץ נפרד (apk-name.apk.idsig), אבל היא דומה לגרסאות 2 ו-3. לא מתבצעים שינויים ב-APK. הסכימה הזו תומכת בהתקנת APK מצטברת של ADB, שמאיצה את התקנת ה-APK.
מסנני Intent דינמיים
כדי לקבל אובייקטים מסוג Intent, האפליקציה צריכה להצהיר בזמן הקימפול אילו סוגי נתונים היא יכולה לקבל. לשם כך, צריך להגדיר מסנן Intent בקובץ המניפסט של האפליקציה. ב-Android מגרסה 10 ומטה, לאפליקציות אין דרך לשנות את מסנני ה-Intent שלהן בזמן הריצה. זו בעיה באפליקציות וירטואליזציה (כמו מכונות וירטואליות ושולחנות עבודה מרוחקים), כי אין להן דרך לדעת בדיוק איזו תוכנה המשתמש יתקין בתוכן.
ב-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 יש שיפורים בשירותי המילוי האוטומטי.
מזהי רמזים ב-AssistStructure.ViewNode
לפעמים כדאי לשירותי מילוי אוטומטי לחשב גיבוב חתימה לתצוגה על סמך המאפיינים של התצוגה. ההנחיה של התצוגה היא מאפיין שמומלץ במיוחד לכלול כשמחשבים גיבוב (hash) של חתימה, אבל מחרוזת ההנחיה עשויה להשתנות בהתאם להגדרות הלוקאל של הטלפון. כדי לפתור את הבעיה, ב-Android 11 הרחבנו את AssistStructure.ViewNode באמצעות השיטה החדשה getHintIdEntry(), שמחזירה את מזהה המשאב של טקסט ההצעה של התצוגה. השיטה הזו מספקת ערך שלא תלוי בלוקאל, שאפשר להשתמש בו כדי לחשב גיבובים של חתימות.
אירועים של הצגת קבוצות נתונים
כדי לעזור לשירותי המילוי האוטומטי לשפר את ההצעות שלהם, ב-Android 11 יש דרך לזהות מקרים שבהם שירות מילוי אוטומטי הציג קבוצות נתונים אבל המשתמש לא בחר אף אחת מהן. ב-Android 11,
FillEventHistory
מדווח על סוג אירוע חדש של
TYPE_DATASETS_SHOWN. FillEventHistory מתעד אירוע מהסוג הזה בכל פעם ששירות המילוי האוטומטי מציג למשתמש קבוצת נתונים אחת או יותר. שירותי מילוי אוטומטי יכולים להשתמש באירועים האלה בשילוב עם האירוע הקיים TYPE_DATASET_SELECTED כדי לקבוע אם המשתמש בחר באחת מהאפשרויות שסופקו למילוי אוטומטי.
שילוב של IME
מקלדות ושיטות קלט אחרות יכולות עכשיו להציג הצעות למילוי אוטומטי בתוך השורה, בסרגל ההצעות או בממשק דומה, במקום בתפריט נפתח. כדי להגן על מידע רגיש כמו סיסמאות ומספרי כרטיסי אשראי, ההצעות מוצגות למשתמש אבל לא ידועות ל-IME עד שהמשתמש בוחר אחת מהן. במאמר שילוב של מילוי אוטומטי עם מקלדות מוסבר איך עורכי שיטות קלט ומנהלי סיסמאות יכולים לתמוך בתכונה הזו.
שיתוף נתונים עם שירות לצילום תוכן
החל מ-Android 11, האפליקציה יכולה לשתף נתונים עם שירות תיעוד התוכן של המכשיר. היכולת הזו מאפשרת למכשיר לספק מידע בהתאם להקשר, למשל להציג את השם של השיר שמתנגן כרגע בסביבה של המשתמש.
כדי שהנתונים מהאפליקציה יהיו זמינים לשירות תיעוד התוכן, צריך להפעיל את השיטה shareData() במופע של ContentCaptureManager. אם המערכת מאשרת את הבקשה לשיתוף נתונים, האפליקציה מקבלת תיאור קובץ לכתיבה בלבד כדי לשתף עם השירות לתיעוד תוכן.