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 לתמיכה בתצוגות מפל, כלומר תצוגות שמקיפות את קצה המכשיר. התצוגות האלה נחשבות לגרסה של תצוגות עם חיתוכי מסך. השיטות הקיימות 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:
- הקונסטרוקטור
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 Biometric.
סוגי אימות
ב-Android 11 הוצג הממשק BiometricManager.Authenticators
, שבו אפשר להצהיר על סוגי האימות שאפליקציה תומכת בהם.
איך קובעים באיזה סוג אימות נעשה שימוש
אחרי שהמשתמש עובר אימות, אפשר לבדוק אם האימות בוצע באמצעות פרטי כניסה למכשיר או פרטים ביומטריים על ידי קריאה ל-getAuthenticationType()
.
תמיכה נוספת במפתחות אימות לכל שימוש
Android 11 מספק תמיכה נוספת באימות באמצעות מפתחות auth-per-use.
שיטות שהוצאו משימוש
ב-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
אמצעי בקרה חדשים של ML
NNAPI 1.3 כולל אמצעי בקרה חדשים שעוזרים להפעיל למידת מכונה בצורה חלקה:
QoS API: ה-API החדש של איכות השירות כולל תמיכה בתעדוף ובמועדים אחרונים לביצוע משימות ב-NNAPI עם הפונקציות החדשות הבאות:
קלט/פלט של דומיין זיכרון: NNAPI 1.3 כולל תמיכה בדומיינים של זיכרון כקלט ופלט להרצה. כך מסירים עותקים מיותרים של אותם נתונים בין רכיבי מערכת שונים, ומשפרים את ביצועי זמן הריצה של רשתות עצביות ב-Android. התכונה הזו מוסיפה קבוצה של ממשקי NDK API חדשים לשימוש עם אובייקטים של
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 קורא לשיטת 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 או סרגל מערכת אחר, קוראים לשיטה 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.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
כדי לבקש גישה ישירה למכשיר אודיו USB עם יכולת הקלטת אודיו (כמו אוזניות USB), מוצגת הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה לשימוש במכשיר.UsbManager
המערכת מתעלמת מכל אפשרות של 'שימוש תמיד', ולכן המשתמש צריך לאשר את האזהרה ולהעניק הרשאה בכל פעם שאפליקציה מבקשת גישה.
כדי למנוע את ההתנהגות הזו, האפליקציה צריכה לבקש את ההרשאה RECORD_AUDIO
.
גישה למיקרופון בו-זמנית
ב-Android 11 נוספו שיטות חדשות לממשקי ה-API AudioRecord
, MediaRecorder
ו-AAudioStream
. השיטות האלה מאפשרות להפעיל ולהשבית את היכולת לצלם בו-זמנית, ללא קשר לתרחיש השימוש שנבחר. אפשר לעיין במאמר בנושא שיתוף קלט אודיו.
מתג מעבר למכשיר אחר
ב-Android 11 הוטמעה התנהגות חדשה באפליקציות שמשתמשות ב-APIs של Cast ו-mediarouter.
בנוסף לאפשרויות הגישה להפעלת Cast מתוך אפליקציה, אפשרויות המעבר מופיעות גם בנגן המדיה של המערכת. כך המשתמשים יכולים לעבור בקלות בין מכשירים כשהם משנים את ההקשר של הצפייה וההאזנה שלהם, למשל צפייה בסרטון במטבח לעומת צפייה בסרטון בטלפון, או האזנה לאודיו בבית לעומת האזנה לאודיו ברכב. כך מחליפים את הפלט
קישוריות
שיפורים ב-Passpoint ברשת Wi-Fi
מידע על היכולות של Passpoint שנוספו ב-Android 11 זמין במאמר בנושא Passpoint.
ההרחבה של Wi-Fi Suggestion API
ב-Android 11, Wi-Fi Suggestion API הורחב כדי לשפר את יכולות ניהול הרשת של האפליקציה, כולל:
- אפליקציות לניהול קישוריות יכולות לנהל את הרשתות שלהן על ידי מתן אפשרות לשליחת בקשות לניתוק.
- רשתות Passpoint משולבות ב-API של ההצעות, ואפשר להציע אותן למשתמש.
- ממשקי ה-API של Analytics מאפשרים לכם לקבל מידע על איכות הרשתות שלכם.
עדכונים של 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 שמבוססות על אפליקציות.
רשתות ה-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 סטנדרטי לאפליקציות 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 הזה הוא טעינה מותאמת אישית של נכסים. אפשר להשתמש ב-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.
מסנני כוונות דינמיים
כדי שאפליקציה תוכל לקבל כוונות, היא צריכה להצהיר בזמן ההידור אילו סוגי נתונים היא יכולה לקבל, על ידי הגדרה של מסנן כוונות במניפסט של האפליקציה. ב-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
לעתים קרובות, שירותים למילוי אוטומטי מחשבים גיבוב חתימה לתצוגה על סמך המאפיינים של התצוגה. רמז הצפייה הוא מאפיין טוב במיוחד לכלול בחישוב של גיבוב החתימה, אבל מחרוזת הרמז עשויה להשתנות בהתאם ללוקאל של הטלפון. כדי לפתור את הבעיה הזו, ב-Android 11 הורחבה השיטה AssistStructure.ViewNode
עם שיטה חדשה getHintIdEntry()
, שמחזירה את מזהה המשאב של טקסט הרמז של תצוגה. השיטה הזו מספקת ערך בלתי תלוי במיקום שאפשר להשתמש בו כדי לחשב גיבובים של חתימות.
אירועים שמוצגים במערכי נתונים
כדי לעזור לשירותי מילוי אוטומטי לשפר את ההצעות שלהם, ב-Android 11 יש דרך לזהות מקרים שבהם שירות מילוי אוטומטי הציג מערכי נתונים אבל המשתמש לא בחר אף אחד מהם. ב-Android 11,
FillEventHistory
מדווח על סוג חדש של אירוע
TYPE_DATASETS_SHOWN
. FillEventHistory
מתעד אירוע מהסוג הזה בכל פעם ששירות המילוי האוטומטי מציג למשתמש מערך נתונים אחד או יותר. שירותי מילוי אוטומטי יכולים להשתמש באירועים האלה בשילוב עם האירוע הקיים TYPE_DATASET_SELECTED
כדי לקבוע אם המשתמש בחר באחת מאפשרויות המילוי האוטומטי שסופקו.
שילוב של IME
עכשיו אפשר להציג הצעות למילוי אוטומטי במקלדות וב-IMEs אחרים בתוך השורה, בסרגל הצעות או בממשק דומה, במקום בתפריט נפתח. כדי להגן על מידע רגיש כמו סיסמאות ומספרי כרטיסי אשראי, ההצעות מוצגות למשתמש אבל לא ידועות ל-IME עד שהמשתמש בוחר אחת מהן. במאמר שילוב מילוי אוטומטי עם מקלדות מוסבר איך אפשר להשתמש ב-IME ובמנהלי סיסמאות כדי לתמוך בתכונה הזו.
שיתוף נתונים עם שירות ללכידת תוכן
החל מ-Android 11, האפליקציה שלכם יכולה לשתף נתונים עם שירות ללכידת תוכן במכשיר. היכולת הזו מאפשרת למכשיר לספק בקלות רבה יותר מידע בהקשר, כמו הצגת השם של שיר שמופעל כרגע בסביבת המשתמש.
כדי להפוך את הנתונים מהאפליקציה לזמינים לשירות ללכידת תוכן, צריך להפעיל את השיטה shareData()
במופע של ContentCaptureManager
. אם המערכת מאשרת את הבקשה לשיתוף נתונים, האפליקציה מקבלת מתאר קובץ לקריאה בלבד לשיתוף עם שירות ללכידת תוכן.