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…() מחזירים עכשיו את ה-safe inset כדי להימנע מאזורים של waterfall וגם מ-cutouts.
כדי להציג את תוכן האפליקציה באזור ה-waterfall:
כדי לקבל את המידות המדויקות של ה-inset של המפל, אפשר להתקשר למספר
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 מספק תמיכה נוספת באימות באמצעות מפתחות אימות לכל שימוש.
שיטות שהוצאו משימוש
השיטות הבאות הוצאו משימוש ב-Android 11:
- השיטה
setDeviceCredentialAllowed(). - השיטה
setUserAuthenticationValidityDurationSeconds(). - הגרסה העמוסה מדי של
canAuthenticate()שלא מקבלת ארגומנטים.
שיתוף מאובטח של מערכי נתונים גדולים
במצבים מסוימים, כמו כאלה שכוללים למידת מכונה או הפעלת מדיה, יכול להיות שאפליקציה מסוימת תרצה להשתמש באותו מערך נתונים גדול כמו אפליקציה אחרת. בגרסאות קודמות של Android, כל אפליקציה הייתה צריכה להוריד עותק נפרד של אותו מערך נתונים.
כדי לצמצם את כפילות הנתונים, גם ברשת וגם בדיסק, ב-Android 11 אפשר לשמור במטמון את מערכי הנתונים הגדולים האלה במכשיר באמצעות בלובי נתונים משותפים. מידע נוסף על שיתוף של מערכי נתונים זמין במדריך המפורט לשיתוף של מערכי נתונים גדולים.
ביצוע הצפנה מבוססת-קבצים אחרי הפעלה מחדש של OTA ללא פרטי כניסה של משתמש
אחרי שהמכשיר משלים עדכון OTA ומבצע הפעלה מחדש, המפתחות של Credential Encrypted (CE) שמוצבים באחסון מוגן באמצעות אישורים זמינים באופן מיידי לפעולות של הצפנה מבוססת-קובץ (FBE). המשמעות היא שאחרי עדכון OTA, האפליקציה יכולה להמשיך פעולות שדורשות את מפתחות ה-CE לפני שהמשתמש מזין את קוד האימות, קו ביטול הנעילה או הסיסמה.
ביצועים ואיכות
ניפוי באגים אלחוטי
ב-Android 11 יש תמיכה בפריסה של האפליקציה ובניפוי באגים שלה באופן אלחוטי מתחנת העבודה באמצעות ממשק הגישור של Android (adb). לדוגמה, אתם יכולים לפרוס את האפליקציה שניתנת לניפוי באגים למספר מכשירים מרוחקים בלי לחבר את המכשיר שלכם פיזית באמצעות USB, ובלי להתמודד עם בעיות נפוצות בחיבור USB, כמו התקנת מנהל התקן. מידע נוסף מופיע במאמר בנושא הפעלת אפליקציות במכשיר ציוד.
התקנת APK מצטברת באמצעות ADB
התקנה של קובצי APK גדולים (בגודל 2GB ומעלה) במכשיר יכולה להימשך זמן רב, גם אם בוצע שינוי קטן באפליקציה. התקנה מצטברת של קובצי APK באמצעות ADB (Android Debug Bridge) מאיצה את התהליך הזה, כי היא מתקינה מספיק מהקובץ כדי להפעיל את האפליקציה בזמן שהנתונים שנותרו מועברים ברקע. 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_LSTMIFWHILEELUHARD_SWISHFILLRANK
אמצעי בקרה חדשים של ML
NNAPI 1.3 כולל אמצעי בקרה חדשים שעוזרים להפעיל למידת מכונה בצורה חלקה:
QoS API: ממשק ה-API החדש של איכות השירות (QoS) כולל תמיכה בתעדוף ובמועדים אחרונים לביצוע משימות ב-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 קורא לשיטת 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. -
LocaleMatcherAPI משופר עם מחלקה ליצירת אובייקטים, תמיכה בסוג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().
MediaParser API
MediaParser הוא API חדש ברמה נמוכה לחילוץ מדיה. הוא גמיש יותר מ-MediaExtractor ומספק שליטה נוספת בפונקציונליות של חילוץ המדיה.
הקלטת אודיו ממכשיר USB
כשמשתמשים באפליקציה ללא הרשאת RECORD_AUDIO UsbManager כדי לבקש גישה ישירה למכשיר אודיו USB עם יכולת הקלטת אודיו (כמו אוזניות USB), מוצגת הודעת אזהרה חדשה שמבקשת מהמשתמש לאשר את ההרשאה להשתמש במכשיר. המערכת מתעלמת מכל אפשרות של 'שימוש תמיד', ולכן המשתמש צריך לאשר את האזהרה ולהעניק הרשאה בכל פעם שאפליקציה מבקשת גישה.
כדי למנוע את ההתנהגות הזו, האפליקציה צריכה לבקש את ההרשאה RECORD_AUDIO.
גישה למיקרופון בו-זמנית
ב-Android 11 נוספו שיטות חדשות לממשקי ה-API AudioRecord, MediaRecorder ו-AAudioStream. ה-methods האלה מאפשרות להפעיל ולהשבית את האפשרות לצלם בו-זמנית, בלי קשר לתרחיש השימוש שנבחר. איך משתפים את קלט האודיו
מתג מעבר למכשיר אחר
ב-Android 11 הוטמעה התנהגות חדשה באפליקציות שמשתמשות ב-APIs של 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, היא מקבלת הודעה כשיש שיחות נכנסות ממספר שנמצא באנשי הקשר של המשתמש או שיחות יוצאות למספר כזה.
מידע נוסף מופיע במאמר בנושא מניעת זיוף של מספר הטלפון המתקשר.
עדכונים ב-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), אבל היא דומה לגרסאות 2 ו-3. לא מתבצעים שינויים ב-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
לעתים קרובות, שירותים למילוי אוטומטי מחשבים גיבוב חתימה לתצוגה על סמך המאפיינים של התצוגה. המאפיין 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. אם המערכת מאשרת את הבקשה לשיתוף נתונים, האפליקציה מקבלת מתאר קובץ לקריאה בלבד לשיתוף עם שירות ללכידת תוכן.