Android 8.0 (רמת API 26) כולל מגוון של תכונות ויכולות חדשות למשתמשים ולמפתחים. במסמך הזה נדגיש את התכונות החדשות למפתחים.
כדאי גם לחזור שינויים בהתנהגות ב-Android 8.0 כדי לקבל מידע על אזורים שבהם הפלטפורמה משתנה עלול להשפיע על האפליקציות שלך.
חווית משתמש
מצב 'תמונה בתוך תמונה'
התכונה 'תמונה בתוך תמונה' ב-Android 8.0.
Android 8.0 (רמת API 26) מאפשרת השקת פעילויות מצב 'תמונה בתוך תמונה' (PIP). התמונה בתוך התמונה (PIP) היא סוג מיוחד של מצב ריבוי חלונות משמש בעיקר להפעלת סרטונים. מצב PIP היה זמין במקור עבור Android TV בלבד; התכונה Android 8.0 זמינה במכשירי Android אחרים.
כשפעילות במצב PIP היא במצב מושהה, אבל רצוי
להמשיך להציג את התוכן. לכן, צריך לוודא שהאפליקציה
לא משהה את ההפעלה בonPause()
המטפל. במקום זאת, צריך להשהות את הסרטון בonStop()
ולהמשיך את ההפעלה בעוד onStart()
. מידע נוסף זמין במאמר הבא:
ריבוי חלונות
מחזור חיים.
כדי לציין שבפעילות שלכם ניתן להשתמש במצב 'תמונה בתוך תמונה', מגדירים
android:supportsPictureInPicture
עד True במניפסט.
(החל מגרסה 8.0 של Android, בשביל PIP לא נדרש
מאפיין מניפסט android:resizeableActivity
.
אבל חייבים להגדיר
android:resizeableActivity
ל-true אם הפעילות שלך תומכת בסוגים אחרים
מצבים של ריבוי חלונות.)
Android 8.0 (רמת API 26) כולל אובייקט חדש, PictureInPictureParams
,
שמעבירים ל-methods של PIP כדי לציין איך פעילות אמורה להתנהג
כשהוא במצב PIP. האובייקט הזה מציין מאפיינים כמו
יחס הגובה-רוחב המועדף על הפעילות.
השיטות הקיימות של PIP שמתוארות ב הוספה התכונה 'תמונה בתוך תמונה' זמינה עכשיו בשימוש בכל מכשירי Android, לא רק ב-Android TV. In addition, ב-Android 8.0 יש את השיטות הבאות לתמיכה מצב PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: תמקם את הפעילות במצב 'תמונה בתוך תמונה'. יחס גובה-רוחב של הפעילות והגדרות אישיות אחרות נקבעות על ידי args. אם יש שדות ב-args ריקים, המערכת משתמשת בערכים שהוגדרו בפעם האחרונה שנקראActivity.setPictureInPictureParams()
.הפעילות שצוינה ממוקמת בפינת המסך. את שאר המסך מלא בפעילות הקודמת שהוצגה במסך. הפעילות שעוברת למצב 'תמונה בתוך תמונה' עוברת למצב מושהה, אבל נשארת במצב מושהה בתהליך. אם המשתמש יקיש על הפעילות בתוך תמונה בתוך תמונה (PIP), המערכת תציג תפריט עבור המשתמש לקיים איתו אינטראקציה; אף אירועי מגע לא יגיעו לפעילות בזמן שהיא במצב 'תמונה בתוך תמונה'.
-
Activity.setPictureInPictureParams()
: עדכון הגדרות התצורה של תמונה בתוך תמונה (PIP) של פעילות. אם הפעילות כרגע במצב PIP, ההגדרות מעודכנות. זה שימושי אם ביחס גובה-רוחב של הפעילות. אם הפעילות לא במצב PIP, הגדרות התצורה האלה משמשות בלי קשר אמצעי התשלום מסוגenterPictureInPictureMode()
שמשתמשים בו.
התראות
ב-Android 8.0 (רמת API 26), עיצבנו מחדש את ההתראות לספק דרך קלה ועקבית יותר לניהול התנהגות ההתראות והגדרות. השינויים האלה כוללים:
- ערוצי התראות: השקה של Android 8.0 ערוצי התראות שמאפשרים ליצור ערוץ שניתן להתאמה אישית לכל סוג של התראה שרוצים להציג. ממשק המשתמש מתייחס לערוצי התראות בתור קטגוריות של התראות. כדי ללמוד איך כדי להטמיע ערוצי התראות: ניהול ערוצי התראות.
- נקודות התראות: ב-Android 8.0 יש תמיכה בהצגה נקודות או תגים בסמלים של מרכז האפליקציות. סימני ההתראות משקפות את קיימות התראות שהמשתמש עדיין לא סגר או לא ביצע לגביהן פעולות. כדי ללמוד איך לעבוד עם סימני ההתראות, אפשר לעיין במאמרים הבאים: התראה תגים.
- העברה למצב 'נודניק': המשתמשים יכולים להעביר התראות למצב נודניק וכתוצאה מכך הן נעלמות למשך זמן מסוים לפני שהוא יופיע שוב. ההתראות מופיעות שוב עם רמת החשיבות שאיתה הם הופיעו לראשונה. אפליקציות יכולות להסיר או לעדכן התראה במצב נודניק, אבל עדכון התראה של מצב נודניק לא גורם כדי להופיע שוב.
- זמן קצוב לתפוגה של התראות: אפשר להגדיר זמן קצוב לתפוגה במהלך יצירת
התראה באמצעות
setTimeoutAfter()
אפשר להשתמש בשיטה הזו כדי לציין משך זמן שאחריו תישלח התראה צריך לבטל את ההזמנה. במקרה הצורך, אפשר לבטל התראה לפני יחלוף פרק הזמן הקצוב לתפוגה שהוגדר. - הגדרת התראות: אפשר להתקשר
setSettingsText()
כדי להגדיר את הטקסט שיופיע כשיוצרים קישור אל האפליקציה הגדרה של התראות מהתראה באמצעות Intent מסוגNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. המערכת עשויה לספק את התוספות הבאות מתוך כוונה לסנן ההגדרות שהאפליקציה צריכה להציג למשתמשים:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
ו-NOTIFICATION_ID
. - סגירת התראה: המשתמשים יכולים לסגור התראות בעצמם, וגם
אפליקציות יכולות להסיר אותן באופן פרוגרמטי. אפשר לקבוע מתי תוצג התראה
נדחה ולמה הוא נסגר על ידי יישום של
השיטה
onNotificationRemoved()
כיתה אחת (NotificationListenerService
). - צבעי רקע: ניתן להגדיר צבע רקע ולהפעיל אותו עבור
התראה. צריך להשתמש בתכונה הזו רק בהתראות עבור
משימות מתמשכות שהן חיוניות שהמשתמש יכול לראות במבט חטוף. עבור
לדוגמה, אפשר להגדיר צבע רקע עבור התראות שקשורות אל
מסלול נסיעה או שיחת טלפון שמתבצעת. אפשר גם להגדיר
צבע רקע רצוי באמצעות
setColor()
אם עושים את זה מאפשרת להשתמש ב-setColorized()
כדי להפעיל שימוש בצבע רקע עבור התראה. - סגנון העברת הודעות: ב-Android 8.0, התראות שמבוססות על
תצוגה של הכיתה ב-
MessagingStyle
עוד תוכן במצב המכווץ. צריך להשתמש כיתה אחת (MessagingStyle
) עבור התראות שקשורות להעברת הודעות. אפשר גם להשתמש שיטהaddHistoricMessage()
כדי לספק הקשר לשיחה על ידי הוספה הודעות היסטוריות להתראות שקשורות להעברת הודעות.
![תפריט לחיצה ארוכה של התראות ב-Android 8.0 (רמת API 26).](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=9&hl=he)
המשתמשים יכולים ללחוץ לחיצה ארוכה על הסמלים של מרכז האפליקציות כדי לראות התראות ב-Android 8.0.
מסגרת למילוי אוטומטי
יצירת חשבון, התחברות ועסקאות בכרטיס אשראי נמשכות זמן רב, ובהרבה מקרים שגיאות. המשתמשים עלולים להרגיש תסכול בגלל אפליקציות שדורשות את הסוגים האלה של משימות שחוזרות על עצמן.
מערכת Android 8.0 (רמת API 26) מאפשרת למלא טפסים, כמו התחברות וטפסים של כרטיסי אשראי, קל יותר עם מבוא למסגרת המילוי האוטומטי. אפליקציות קיימות וחדשות פועלות עם מסגרת המילוי האוטומטי אחרי שהמשתמש מביע הסכמה מילוי אוטומטי.
יש כמה פעולות שאפשר לבצע כדי לשפר את האופן שבו האפליקציה עובדת עם ה-framework. לקבלת מידע נוסף, סקירה כללית של מסגרת המילוי האוטומטי
גופנים שניתנים להורדה
ב-Android 8.0 (רמת API 26) ובספריית התמיכה של Android 26 אפשר לבקש גופנים של הספק במקום לקבץ גופנים ב-APK או לאפשר גופנים להורדת ה-APK. התכונה הזו מקטינה את ה-APK, ומגדילה את האפליקציה שיעור ההצלחה של ההתקנה, ומאפשר לאפליקציות מרובות לשתף את אותו הגופן.
למידע נוסף על הורדת גופנים, עיינו ב גופנים להורדה.
גופנים ב-XML
ב-Android 8.0 (רמת API 26) השקנו תכונה חדשה, 'גופנים ב-XML',
מאפשרת להשתמש בגופנים כמשאבים. כלומר, אין צורך לקבץ גופנים
כנכסים. הגופנים מורכבים בקובץ R
ומעובדים באופן אוטומטי
זמין במערכת בתור משאב. לאחר מכן תוכלו לגשת לגופנים האלה באמצעות
עזרה בסוג משאב חדש, font
.
בספריית התמיכה בגרסה 26 יש תמיכה מלאה בתכונה הזו במכשירים. שפועלת בהם גרסת API 14 ומעלה.
למידע נוסף על שימוש בגופנים כמשאבים ואחזור גופנים של המערכת, ראו גופנים ב-XML.
שינוי גודל אוטומטי של TextView
ב-Android 8.0 (רמת API 26) אפשר להגדיר את גודל הטקסט להרחבה או חוזה באופן אוטומטי בהתאם לגודל של TextView. כלומר, לבצע אופטימיזציה של גודל הטקסט במסכים שונים או בתוכן דינמי. למידע נוסף על שינוי גודל אוטומטי של TextView ב-Android 8.0, ראו שינוי אוטומטי של גודל TextView.
סמלים מותאמים
ב-Android 8.0 (רמת API 26) מוצגים סמלים מותאמים של מרכז האפליקציות. סמלים מותאמים אישית תומכים ברכיבים חזותיים אפקטים, ולהציג מגוון צורות בדגמי מכשירים שונים. כדי ללמוד איך איך יוצרים סמלים מותאמים אישית. מידע נוסף זמין בקטע סמלים מותאמים מותאמת אישית.
ניהול צבעים
מפתחים של אפליקציות הדמיה ל-Android יכולים עכשיו לנצל מכשירים חדשים הם בעלי מסך רחב עם יכולות צבעים. כדי להציג סולם רחב תמונות, יהיה צורך להפעיל סימון במניפסט של האפליקציות (לכל פעילות) ולטעון מפות סיביות באמצעות פרופיל צבעים רחב מוטמע (AdobeRGB, Pro Photo RGB , DCI-P3 וכו').
ממשקי API של WebView
ב-Android 8.0 יש כמה ממשקי API שעוזרים לנהל
WebView
האובייקטים שמציגים תוכן מהאינטרנט באפליקציה.
ממשקי ה-API האלה, שמשפרים את היציבות והאבטחה של האפליקציה, כוללים את
הבאים:
- גרסה API
- ממשק API של Google לגלישה בטוחה
- ממשק ה-API של ידית הסיום
- ממשק API של רינדור Renderer
מידע נוסף על אופן השימוש בממשקי ה-API האלה זמין בכתובת ניהול רכיבי WebView.
הכיתה WebView
כוללת עכשיו API של גלישה בטוחה לצורך שיפור האבטחה
של הגלישה באינטרנט. מידע נוסף זמין במאמר הבא:
API של Google לגלישה בטוחה.
הצמדת ווידג'טים וקיצורי דרך
Android 8.0 (רמת API 26) כולל הצמדה של מקשי קיצור בתוך האפליקציה הווידג'טים האלה. באפליקציה שלך ניתן ליצור קיצורי דרך ווידג'טים מוצמדים במרכזי אפליקציות נתמכים, בכפוף להרשאת המשתמש.
מידע נוסף זמין במאמר הצמדת קיצורי דרך וווידג'טים והמדריך לפיצ'רים.
יחס גובה-רוחב מקסימלי למסך
במערכת Android 8.0 (רמת API 26) יש שינויים באופן ההגדרה של יחס גובה-רוחב מקסימלי באפליקציה.
ראשית, Android 8.0 כולל את maxAspectRatio, שאותו אפשר שבהם אפשר להשתמש כדי להגדיר את יחס הגובה-רוחב המקסימלי לאפליקציה. בנוסף, ב-Android מגרסה 8.0 ואילך, ברירת מחדל של יחס גובה-רוחב מקסימלי הוא יחס הגובה-רוחב המקורי של המכשיר שבו האפליקציה פועלת.
לקבלת מידע נוסף בנושא הצהרה על יחס גובה-רוחב מקסימלי, תמיכה במספר מסכים.
תמיכה בתצוגה מרובת מסכים
החל מ-Android 8.0 (רמת API 26), הפלטפורמה מציעה גרסאות משופרות תמיכה במספר מסכים. אם פעילות תומכת במצב ריבוי חלונות פועל במכשיר עם כמה מסכים, המשתמשים יכולים להזיז את הפעילות ממסך אחד לתצוגה אחרת. כשאפליקציה מתחילה פעילות, האפליקציה יכול לציין באיזו תצוגה של הפעילות תפעל.
הערה : אם בפעילות מסוימת יש תמיכה מצב ריבוי חלונות, Android 8.0 מפעיל באופן אוטומטי תמיכה בתצוגה מרובת מסכים בפעילות הזו. כדאי לבדוק את האפליקציה כדי לוודא שהוא פועל כראוי בסביבה מרובת מסכים.
רק פעילות אחת בכל פעם יכולה להיות במצב המשך, גם אם יש כמה מסכים. הפעילות שמתמקדת בה נמצאת במצב מחודש. כל שאר הפעילויות הגלויות מושהות, אבל לא הופסקו. אפשר לקבל מידע נוסף במחזור החיים של הפעילות כשיש כמה פעילויות גלויות, בקטע ריבוי חלונות מחזור חיים.
כשמשתמש מעביר פעילות ממסך אחד לאחר, המערכת משנה את גודל הפעילות וגורם לשינויים בזמן הריצה לפי הצורך. הפעילות שלכם יכול לטפל בשינוי התצורה עצמו, או לאפשר למערכת להשמיד את התהליך שמכיל את הפעילות שלכם וליצור אותה מחדש באמצעות הפונקציה מאפיינים. מידע נוסף זמין במאמר הבא: טיפול בתצורה שינויים.
ב-ActivityOptions
יש שתי שיטות חדשות לתמיכה
מספר מסכים:
setLaunchDisplayId()
- ההגדרה קובעת באיזה תצוגה של הפעילות תוצג לאחר ההפעלה.
getLaunchDisplayId()
- מחזירה את תצוגת ההפעלה הנוכחית של הפעילות.
מעטפת adb מורחבת כדי לתמוך בכמה מסכים.
עכשיו אפשר להשתמש בפקודה shell start
כדי להתחיל פעילות,
וכדי לציין את תצוגת היעד של הפעילות:
adb shell start <activity_name> --display <display_id>
שוליים ומרווחי פריסה מאוחדים
עם Android 8.0 (רמת API 26) קל יותר לציין מצבים שבהם שני הצדדים הנגדיים
של רכיב View
משתמשים באותם שוליים או מרווח פנימי.
באופן ספציפי, עכשיו אפשר להשתמש במאפיינים הבאים ב-XML של הפריסה
קבצים:
-
layout_marginVertical
, שמגדירlayout_marginTop
וlayout_marginBottom
בו-זמנית. -
layout_marginHorizontal
, שמגדירlayout_marginLeft
וlayout_marginRight
בו-זמנית. -
paddingVertical
, שמגדירpaddingTop
וpaddingBottom
בו-זמנית. -
paddingHorizontal
, שמגדירpaddingLeft
וpaddingRight
בו-זמנית.
הערה: אם אתם מתאימים אישית את הלוגיקה של האפליקציה:
תמיכה אחרת
ותרבויות שונות, כולל כיוון טקסט, צריך לזכור
אינם משפיעים על הערכים של
layout_marginStart
,
layout_marginEnd
,
paddingStart
, או
paddingEnd
. אתם יכולים להגדיר את הערכים האלה בעצמכם, בנוסף
את מאפייני הפריסה החדשה והאופקית החדשה, כדי ליצור התנהגות פריסה
שתלויה בכיוון של הטקסט.
צילום מצביע
אפליקציות מסוימות, כמו משחקים, Remote Desktop ולקוחות וירטואליזציה, להפיק תועלת משליטה על סמן העכבר. האפשרות לצלם את הסמן – זו תכונה חדשה ב-Android 8.0 (רמת API 26) שמספקת שליטה כזו על ידי שליחה של כל האירועים בעכבר. לתצוגה ממוקדת באפליקציה.
החל מגרסה 8.0 של Android, View
באפליקציה שלך יכול לבקש
תיעוד של אירועי מצביע והגדרת מאזינים לצורך עיבוד של אירועי מצביע שהוקלטו.
מצביע העכבר מוסתר במצב הזה. התצוגה יכולה לשחרר את לכידת הסמן
כשהוא לא צריך יותר את פרטי העכבר. המערכת יכולה גם לשחרר
תיעוד הסמן כשהתצוגה מאבדת את המיקוד, לדוגמה, כשמשתמש פותח
לאפליקציה אחרת.
כדי לקבל מידע נוסף על השימוש בתכונה הזו באפליקציה שלכם, אפשר לעיין במאמר: צילום מצביע.
קטגוריות של אפליקציות
ב-Android 8.0 (רמת API 26) כל אפליקציה יכולה להצהיר על קטגוריה שמתאימה לה
לחשבון, כשהדבר רלוונטי. הקטגוריות האלה משמשות לקיבוץ אפליקציות דומות
מטרה או פונקציה כשמציגים אותם למשתמשים, למשל בקטע 'שימוש בנתונים', 'שימוש בסוללה'
שימוש בנפח אחסון. אפשר להגדיר קטגוריה לאפליקציה על ידי הגדרת
מאפיין android:appCategory
ב<application>
תג מניפסט.
מרכז האפליקציות ל-Android TV
Android 8.0 (רמת API 26) כולל גרסה חדשה ממוקדת תוכן, חוויית המשתמש במסך הבית של Android TV, שזמינה במכשירים עם אמולטור Android TV ותמונה של מכשיר Nexus Player ל-Android 8.0. מסך הבית החדש יארגן של תוכן וידאו בשורות המתאימות לערוצים, שכל אחד מהם מאוכלס בתוכניות על ידי אפליקציה במערכת. אפליקציות יכולות לפרסם מספר ערוצים, והמשתמשים יכולים להגדיר את הערוצים שרוצים לראות במסך הבית. מסך הבית של Android TV כולל גם את השורה 'במה לצפות עכשיו', מאוכלסים בתוכניות מאפליקציות, בהתאם להרגלי הצפייה של המשתמש. אפליקציות יכולות לספק גם תצוגות מקדימות של סרטונים, שמופעלות באופן אוטומטי כשהמשתמש מתמקד בתוכנית. ממשקי ה-API של האכלוס של הערוצים והתוכניות הם חלק מממשקי ה-API של TvProvider, שמופצים כ-Android תמיכה במודול הספרייה עם Android 8.0.
קבוצת אנימטורים
החל מגרסה 8.0 של Android (רמת API 26), API של AnimatorSet
תומך עכשיו בחיפוש ובהפעלה
הפוך. דילוג מאפשר להגדיר את מיקום האנימציה המוגדר
בזמן. הפעלה בסדר הפוך אם האפליקציה כוללת אנימציות
בעקבות פעולות שאפשר לבטל. במקום להגדיר שתי אנימציות נפרדות
יכולים לשחק את אותה משחק בסדר הפוך.
קלט וניווט
אשכולות ניווט של המקלדת
אם בפעילות באפליקציה נעשה שימוש בהיררכיית תצוגה מורכבת, כמו זו איור 2: כדאי לארגן קבוצות של רכיבי ממשק משתמש באשכולות כדי שיהיה קל יותר לנווט ביניהם. המשתמשים יכולים ללחוץ על Meta+Tab או על 'חיפוש+Tab' מכשירי Chromebook, כדי לנווט מאשכול אחד לאשכול אחר. דוגמאות טובות של אשכולות כוללים: חלוניות צדדיות, סרגלי ניווט, אזורי תוכן ראשיים ורכיבים שעלול להכיל הרבה רכיבי צאצא.
![פעילות לדוגמה שכוללת חמישה אשכולות ניווט של המשתמש
יוכל לנווט באמצעות מקש הקיצור של אשכול הניווט במקלדת. האשכולות
יופיעו בסידור הבא: חלונית עליונה, חלונית צדדית שמאלית, תוכן ראשי
אזור, חלונית תחתונה ולחצן פעולה צף.](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=9&hl=he)
כדי ליצור רכיב View
או ViewGroup
אשכול, מגדירים
שיוך של android:keyboardNavigationCluster
לערך
true
בקובץ ה-XML של פריסת הרכיב, או להעביר את true
setKeyboardNavigationCluster()
בלוגיקת ממשק המשתמש של האפליקציה.
הערה: לא ניתן להציב אשכולות, גם אם הם לא בתצוגת עץ
יכולים להופיע אשכולות ברמות שונות של ההיררכיה. אם תנסו
אשכולות Nest, ה-framework מתייחס רק
את הרכיב ViewGroup
כאשכול.
במכשירים עם מסכי מגע, ניתן להגדיר
של אובייקט ViewGroup
רכיב android:touchscreenBlocksFocus
אל true
עד
לאפשר ניווט לאשכול בלבד אל האשכול הזה ומחוץ לו. אם המערכת תחיל את ההגדרה הזו
את ההגדרות האישיות של אשכול, המשתמשים לא יכולים להשתמש במקש Tab או במקשי החיצים כדי
לנווט אל האשכול או ממנו; הם חייבים ללחוץ על הניווט באשכולות
במקום זאת,
הצגת מיקוד ברירת המחדל
ב-Android 8.0 (רמת API 26), אפשר להקצות את View
קבלת מיקוד לאחר המשך פעילות שנוצרה מחדש והמשתמש לוחץ על לחצן
מקש הניווט במקלדת, למשל Tab. כדי להחיל את ההגדרה הזו על 'התמקדות כברירת מחדל'
הגדרה, הגדרת רכיב View
android:focusedByDefault
ל-true
ב
פריסת קובץ XML שמכיל את הרכיב של ממשק המשתמש, או להעביר ב-true
אל
setFocusedByDefault()
ב-
לוגיקת ממשק המשתמש של האפליקציה.
פלט דיבור
הפעילויות והשירותים יכולים להשתמש במופעים של
TextToSpeech
כדי להכתיב ולהגות תוכן. נכון לתאריך
Android 8.0 (רמת API 26), האפליקציה שלך יכולה לקבל פרטי תזמון מדויקים יותר
בערך שבו מנוע המרת טקסט לדיבור מתחיל לומר מילים בודדות מסונתזות,
כל עוד המנוע מספק את המידע הזה. אפשר להשתמש בפונקציונליות הזו
להפנות את תשומת הלב למילים ספציפיות בזמן שמנוע המרת הטקסט לדיבור מדבר
אותם.
כדי להשתמש בשיפורי המנוע של המרת טקסט לדיבור (TTS) באפליקציה שלך, עליך לרשום
מופע של UtteranceProgressListener
. כחלק
את תהליך הרישום, לכלול handler של
onRangeStart()
.
הקריאות למנוע המרת טקסט לדיבור (TTS)
rangeStart()
להקלטה
נקודת הזמן שבה מצפה הפעלת אודיו של טווח מסוים של טקסט
בתור התחלה. כשהאודיו בטווח הטקסט הזה מתחיל לפעול,
onRangeStart()
מופעלת. האפליקציה יכולה להגיב לקריאה החוזרת הזו, למשל באמצעות
הדגשת טווח הטקסט שקשור לביטוי.
לקבלת מידע נוסף על מעקב אחר התקדמות ההפעלה של המרת טקסט לדיבור (TTS)
מנוע, ראו את הכיתה UtteranceProgressListener
הפניה.
מערכת
מזהי StrictMode חדשים
במערכת Android 8.0 (רמת API 26) נוספו שלושה מזהי StrictMode חדשים שעוזרים לזהות באגים אפשריים באפליקציה שלך:
- המכשיר
detectUnbufferedIo()
יזהה מתי האפליקציה קוראת או כותבת נתונים ללא אגירת נתונים. הדבר עלול להשפיע באופן משמעותי או של ביצועים. - הפעולה או הפעולות שיתבצעו על ידי
detectContentUriWithoutPermission()
לזהות מתי האפליקציה שוכחת בטעות להעניק הרשאות לאפליקציה אחרת, התחלת פעילות מחוץ לאפליקציה. - המכשיר
detectUntaggedSockets()
יזהה מתי שהאפליקציה שלכם מבצעת תנועה ברשת בלי להשתמשsetThreadStatsTag(int)
כדי לתייג את התנועה לצורך ניפוי באגים למטרות.
נתונים בקובץ שמור
ב-Android 8.0 (רמת API 26) יש הנחיות והתנהגויות טובות יותר לגבי נתונים שנשמרו במטמון. כל אחד
ניתנת כעת מכסת מקום בכונן לנתונים שנשמרו במטמון, כפי שהוחזר על ידי
getCacheQuotaBytes(UUID)
כשהמערכת תצטרך לפנות מקום בכונן, היא תתחיל במחיקת קבצים שנשמרו במטמון מאפליקציות שהם הכי גדולים מהמכסה שהוקצתה להם. לכן, אם אתם שומרים את הנתונים השמורים במטמון במכסה שהוקצתה, הקבצים במטמון יהיו חלק מהקבצים האחרונים שהמערכת תמחק הנחוצים. כשהמערכת מחליטה אילו קבצים שנשמרו במטמון למחוק בתוך האפליקציה, היא קודם צריך להביא בחשבון את הקבצים הישנים ביותר (כפי שייקבע לפי מועד השינוי).
יש גם שתי התנהגויות חדשות שניתן להפעיל עבור כל ספרייה כדי לשלוט בהן איך המערכת משחררת את הנתונים השמורים במטמון:
- אפשר להשתמש במשתנה
StorageManager.setCacheBehaviorAtomic()
כדי לציין שספרייה וכל התוכן שלה צריכים למחוק כיחידה אטומית אחת. - אפשר להשתמש במשתנה
setCacheBehaviorTombstone(File, boolean)
כדי לציין שבמקום למחוק קבצים בתוך ספרייה, צריך לחתוך אותם כך שיהיו 0 בייטים האורך, כך שהקובץ הריק נשאר ללא שינוי.
לבסוף, כשצריך להקצות מקום בכונן לקבצים גדולים, כדאי לשקול להשתמש
API של allocateBytes(FileDescriptor, long)
, שיימחקו באופן אוטומטי
קבצים שנשמרו במטמון השייכים לאפליקציות אחרות (לפי הצורך) כדי לעמוד בבקשה שלכם. כדי להחליט אם
במכשיר יש מספיק מקום בכונן כדי לשמור את הנתונים החדשים, להתקשר
getAllocatableBytes(UUID)
במקום להשתמש
getUsableSpace()
, מפני שהשיטה הראשונה תתייחס לכל
נתונים שהמערכת מוכנה לנקות בשמכם.
חלוקה לדפים של ספק התוכן
עדכנו את ספקי התוכן ועכשיו הם כוללים תמיכה בטעינת קובצי של כל דף בנפרד. לדוגמה, אפליקציית תמונות שכוללת אלפים רבים תמונות יכולות לשלוח שאילתה לקבוצת משנה של הנתונים שיוצגו בדף. כל דף מהתוצאות המוחזרות על ידי ספק תוכן מיוצגות על ידי סמן יחיד לאובייקט. כדי להשתמש ב-Google Cloud, גם לקוח וגם ספק צריכים להטמיע את החלוקה לדפים בתכונה הזו.
למידע מפורט על השינויים שבוצעו בספקי תוכן, ראו
ContentProvider
והקבוצה
ContentProviderClient
.
בקשות לרענון תוכן
ContentProvider
וגם
עכשיו, כל אחת מ-ContentResolver
כיתות כוללת
refresh()
, שמקלה על הלקוחות לדעת
המידע שהם מבקשים עדכני.
אפשר להוסיף לוגיקה מותאמת אישית לרענון תוכן באמצעות הרחבה
ContentProvider
חשוב להגדיר שינוי מברירת המחדל של
שיטה אחת (refresh()
) להחזרה
true
, שמציין ללקוחות של הספק שניסיתם לעשות זאת
כדי לרענן את הנתונים בעצמכם.
אפליקציית הלקוח שלך יכולה לבקש באופן מפורש תוכן שעבר רענון על ידי קריאה
שיטה אחרת, שנקראת גם
refresh()
בשיחה
, מעבירים את ה-URI של הנתונים לרענון.
הערה: ייתכן שאתם מבקשים נתונים ברשת,
עליך להפעיל את refresh()
מ-
בצד הלקוח רק כאשר יש אינדיקציה ברורה לכך שהתוכן מיושן.
הסיבה הנפוצה ביותר לביצוע רענון תוכן מהסוג הזה היא בתגובה
החלקה לרענון
תנועה שמבקשת באופן מפורש מממשק המשתמש הנוכחי להציג תוכן עדכני.
שיפורים ב-Job Scheduler
מערכת Android 8.0 (רמת API 26) כוללת מספר שיפורים ב-JobScheduler
. השיפורים האלה עוזרים לשפר את האפליקציה
כדי להתאים לרקע החדש"
מגבלות ביצוע, כי בדרך כלל ניתן להשתמש במשימות מתוזמנות כדי להחליף
את שירותי הרקע שמוגבלים עכשיו או את מקלטי השידורים המשתמעים.
העדכונים ל-JobScheduler
כוללים:
-
עכשיו אפשר לשייך תור בעבודה למשימה מתוזמנת. כדי להוסיף פריט עבודה אל
תור של עבודה, התקשרות
JobScheduler.enqueue()
כשהמשימה פועלת, היא יכולה להסיר את העבודה שבהמתנה ולעבד אותה. הפונקציונליות הזו מטפלת ברבים מהתרחישים לדוגמה שבעבר היו שנקראת 'התחלת שירות ברקע', שירותים ספציפיים שמטמיעיםIntentService
-
ב-Android
ספריית התמיכה בגרסה 26.0.0 כוללת מחלקה חדשה של
JobIntentService
, שכוללת את כ-IntentService
, אבל משתמש במשימות במקום ב- שירותים שפועלים ב-Android בגרסה 8.0 (רמת API 26) ואילך. -
עכשיו אפשר להתקשר
JobInfo.Builder.setClipData()
כדי לשייךClipData
למשימה. האפשרות הזו מפעילה כדי לשייך למשימה הרשאות URI, באופן דומה לאופן שבו אפשר להפיץ את ההרשאות אלContext.startService()
. אפשר גם להשתמש בהענקת הרשאות URI עם Intent בתורים בעבודה. -
משימות מתוזמנות תומכות עכשיו בכמה אילוצים חדשים:
JobInfo.isRequireStorageNotLow()
- המשימה לא פועלת אם נפח האחסון הזמין במכשיר קטן.
JobInfo.isRequireBatteryNotLow()
- המשימה לא פועלת אם רמת הטעינה של הסוללה היא ברמה הקריטית או נמוכה ממנה ערך סף; זו הרמה שבה מוצג המכשיר רמת סוללה חלשה תיבת דו-שיח של המערכת.
NETWORK_TYPE_METERED
- למשימה נדרשת חיבור לרשת עם חיוב לפי שימוש בנתונים, כמו רוב חבילת הגלישה לתוכניות.
מאגר נתונים בהתאמה אישית
Android 8.0 (רמת API 26) מאפשרת לכם לספק מאגר נתונים בהתאמה אישית להעדפות שלכם, שיכול להיות שימושיות אם האפליקציה מאחסנת את ההעדפות בענן או במסד נתונים מקומי, או אם ההעדפות ספציפיות למכשיר. מידע נוסף על מטמיעים את מאגר הנתונים, מאגר נתונים בהתאמה אישית
שיפורי מדיה
מעצב נפח
יש כיתה חדשה בשם VolumeShaper
. כדאי להשתמש
כדי לבצע מעברים אוטומטיים קצרים של עוצמת קול כמו עמעום הדרגתי, עמעום הדרגתי ועמעום הדרגתי.
למידע נוסף, ראו שליטה במשרעת באמצעות Volume shaper
למידע נוסף.
שיפורי מיקוד אודיו
אפליקציות האודיו משתפות את פלט האודיו במכשיר על ידי שליחת בקשה למיקוד האודיו ונטישה.
אפליקציה מטפלת בשינויים במיקוד על ידי הפעלה או עצירה של ההפעלה, או הנמכת עוצמת הקול.
יש כיתה חדשה בשם AudioFocusRequest
. שימוש במחלקה הזו כפרמטר של
requestAudioFocus()
,
לאפליקציות יש יכולות חדשות כאשר מטפלים בשינויים במיקוד האודיו:
הנמכה אוטומטית בהתאמה אישית וגם
עיבוד מאוחר של הפוקוס.
מדדי מדיה
השיטה החדשה של getMetrics()
מחזירה PersistableBundle
אובייקט שמכיל הגדרה
ומידע על הביצועים, מבוטא כמפה של מאפיינים וערכים.
השיטה getMetrics()
מוגדרת למחלקות המדיה הבאות:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
המדדים נאספים בנפרד לכל מכונה ונשמרים כל משך החיים של המכונה. אם אין מדדים זמינים, השיטה מחזירה null. המדדים שמוחזרים בפועל תלויים במחלקה.
נגן מדיה
החל מ-Android 8.0 (רמת API 26), MediaPlayer יכול להפעיל מוגן באמצעות DRM חומר ומדיה מוצפנת ברמת HLS.
מערכת Android 8.0 מציגה עומס יתר חדש
פקודה seekTo()
שמספקת מידע מפורט
לשליטה בדילוג לפריים. היא כוללת פרמטר שני שמציין מצב חיפוש:
SEEK_PREVIOUS_SYNC
מעביר את מיקום המדיה למסגרת סנכרון (או מקש) שמשויכים למקור נתונים שנמצא ממש לפני זמן נתון או בזמן נתון.SEEK_NEXT_SYNC
מעביר את מיקום המדיה למסגרת סנכרון (או מפתח) שמשויכת עם מקור נתונים שנמצא מיד אחרי או בזמן הנתון.SEEK_CLOSEST_SYNC
מעביר את מיקום המדיה למסגרת סנכרון (או מקש) המשויך למקור נתונים שנמצא קרוב אליו ביותר בזמן נתון או בזמן נתון.SEEK_CLOSEST
מעביר את מיקום המדיה למסגרת (לא בהכרח סנכרון) או מסגרת מפתח) המשויך למקור הנתונים הקרוב ביותר אליו, או בזמן הנתון.
בזמן דילוג ברציפות, אפליקציות צריכות להשתמש בכל אחד מהמצבים של SEEK_
ולא במצב SEEK_CLOSEST
, שפועל לאט יותר יחסית אבל יכול להיות מדויק יותר.
מקליט מדיה
- MediaRecorder תומך כעת בפורמט MPEG2_TS השימושי
סטרימינג:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
יכול לעבד כל מספר של שידורי אודיו ווידאו. הערוץ שלך כבר לא מוגבל לטראק אודיו אחד ו/או לטראק וידאו אחד. שימוש בפורמטaddTrack()
כדי לשלב כמה טראקים שרוצים.MediaMuxer
גם יכול להוסיף טראק אחד או יותר של מטא-נתונים שמכילים כל פריים בהגדרת המשתמש מידע. הפורמט של המטא-נתונים מוגדר באפליקציה שלכם. טראק של מטא-נתונים נתמך רק למאגרי MP4.
מטא-נתונים יכולים להיות שימושיים לעיבוד אופליין. לדוגמה, אותות ג'ירו אפשר להשתמש בחיישן כדי לבצע ייצוב וידאו.
כשמוסיפים טראק של מטא-נתונים, פורמט ה-mime של הטראק חייב להתחיל בקידומת
"application/ ". כתיבת מטא-נתונים זהה לכתיבה של נתוני וידאו/אודיו, למעט
שהנתונים לא מגיעים באמצעות MediaCodec
. במקום זאת, האפליקציה מעבירה
ByteBuffer
עם חותמת זמן משויכת של
writeSampleData()
.
חותמת הזמן חייבת להיות באותו בסיס זמן כמו הטראקים של הסרטון והאודיו.
קובץ ה-MP4 שנוצר משתמש בTextMetaDataSampleEntry
שהוגדר בקטע
12.3.3.2 של ה-ISOBMFF לציון פורמט mime של המטא-נתונים. כשמשתמשים ב-MediaExtractor
כדי לחלץ את הקובץ עם טראק של מטא-נתונים, ה-mime
פורמט המטא-נתונים יחולץ אל MediaFormat
.
גישה משופרת לקובצי מדיה
Storage Access Framework (SAF) מאפשר לאפליקציות לחשוף
DocumentsProvider
, שיכול לספק גישה לקבצים
במקור נתונים לאפליקציות אחרות. למעשה,
ספק מסמכים יכול אפילו לספק גישה לקבצים
שנמצאים באחסון רשת או שמשתמשים בפרוטוקול כמו
Media Transfer Protocol (MTP).
עם זאת, גישה לקובצי מדיה גדולים ממקור נתונים מרוחק עלולה ליצור אתגרים:
- נגני מדיה דורשים גישה לקובץ מספק מסמכים. במקרים שבהם קובץ מדיה גדול נמצא במקור נתונים מרוחק, ספק המסמכים חייב לאחזר את כל הנתונים מראש וליצור קובץ snapshot שמתאר קובץ. נגן המדיה לא יכול להפעיל את הקובץ בלי הקובץ ולכן ההפעלה לא יכולה להתחיל עד שספק המסמכים יסיים מורידים את הקובץ.
- מנהלי אוספים מדיה, כגון אפליקציות תמונות, חייבים לעבור סדרה של גישה למזהי URI כדי להגיע למדיה ששמורה בכרטיס SD חיצוני באמצעות היקף תיקיות. דפוס הגישה הזה מבצע פעולות המוניות על מדיה, כמו העברה, העתקה ומחיקה – די איטי.
- מנהלי אוספים מדיה לא יכולים לקבוע את מיקום המסמך בגלל URI. המצב הזה מקשה על אפליקציות מהסוגים האלה לבחור אם המשתמשים יוכלו לבחור איפה שומרים קובץ מדיה.
מערכת Android 8.0 נותנת מענה לכל אחד מהאתגרים האלה באמצעות שיפור הגישה לאחסון מסגרת.
ספקי מסמכים בהתאמה אישית
החל מ-Android 8.0, Storage Access Framework מאפשר מסמכים מותאמים אישית והספקים שלהם כדי ליצור תיאורי קבצים שניתנים לחיפוש עבור קבצים הממוקמים מקור נתונים מרוחק. ה-SAF יכול לפתוח קובץ כדי לקבל קובץ נייטיב שניתן לחיפוש עם תיאור. לאחר מכן ה-SAF שולח בקשות בייטים נפרדות למסמכים ספק. התכונה הזו מאפשרת לספק מסמכים להחזיר את הטווח המדויק של הבייטים שאפליקציית נגן מדיה ביקשה, במקום לשמור במטמון את כל מראש.
כדי להשתמש בתכונה הזו, צריך לקרוא לפונקציה החדשה
אמצעי תשלום אחד (StorageManager.openProxyFileDescriptor()
).
ה-method openProxyFileDescriptor()
מקבלת אובייקט ProxyFileDescriptorCallback
כקריאה חוזרת (callback). ה-SAF מפעיל
הקריאה החוזרת (callback) בכל פעם שאפליקציית לקוח מבצעת פעולות בקובץ
מתאר קובץ שהוחזר מספק המסמכים.
גישה ישירה למסמכים
החל מ-Android 8.0 (רמת API 26), אפשר להשתמש
אמצעי תשלום אחד (getDocumentUri()
) אל
מקבלים URI שמפנה לאותו מסמך כמו ה-mediaUri
הנתון.
עם זאת, מאחר שה-URI המוחזר מגובה על ידי
DocumentsProvider
, למנהלי אוסף מדיה יש גישה
את המסמך ישירות, בלי שתצטרכו לחצות עצים של ספריות עם הרשאות בהיקף רחב.
כתוצאה מכך, מנהלי המדיה יכולים לבצע פעולות קבצים במסמך
מהר יותר באופן משמעותי.
זהירות: השיטה getDocumentUri()
מאתרת רק קובצי מדיה. הוא לא מאפשר אפליקציות
הרשאה לגשת לקבצים האלה. מידע נוסף על דרכים לקבלת גישה
הרשאה לקובצי מדיה, ראה את מאמרי העזרה.
נתיבים למסמכים
כשמשתמשים ב-Storage Access Framework ב-Android 8.0 (רמת API 26), אפשר להשתמש
אמצעי תשלום findDocumentPath()
, זמין בשתי הפלטפורמות
DocumentsContract
וגם
DocumentsProvider
מחלקות, כדי לקבוע את הנתיב מהשורש של מערכת קבצים בהינתן המסמך
ID. ה-method מחזירה את הנתיב ב-
אובייקט DocumentsContract.Path
. במקרים שבהם קובץ
יש כמה נתיבים מוגדרים לאותו מסמך, השיטה מחזירה את
הנתיב שבו משתמשים בדרך כלל כדי להגיע למסמך עם המזהה הנתון.
הפונקציונליות הזו שימושית במיוחד בתרחישים הבאים:
- באפליקציה שלך נעשה שימוש באפשרות 'שמירה בשם' תיבת דו-שיח שמציגה את המיקום של מסמך מסוים.
- באפליקציה שלך מוצגות תיקיות בתצוגת תוצאות החיפוש, וצריך לטעון את הילד או הילדה מסמכים שנמצאים בתיקייה מסוימת אם המשתמש בוחר .
הערה: אם לאפליקציה שלכם יש הרשאת גישה רק לחלק מהמסמכים
בנתיב, הערך המוחזר של findDocumentPath()
כולל רק
התיקיות והמסמכים שאליהם האפליקציה יכולה לגשת.
מעקב אחרי הפעלת האודיו
שירות המערכת AudioManager
שומר רשימה של
אובייקטים פעילים של AudioPlaybackConfiguration
, שכל אחד מהם
מכיל מידע על סשן מסוים של הפעלת אודיו. האפליקציה שלך יכולה
לאחזר את מערך ההגדרות הפעילות הפעילות על ידי קריאה
getActivePlaybackConfigurations()
החל מ-Android 8.0 (רמת API 26), אפשר לרשום קריאה חוזרת כדי להודיע
לאפליקציה שלכם, אם
AudioPlaybackConfiguration
אובייקטים השתנו. כדי לעשות את זה,
קוראים לפונקציה registerAudioPlaybackCallback()
, מעבירים במופע של
AudioManager.AudioPlaybackCallback
.
הכיתה AudioManager.AudioPlaybackCallback
מכילה את
onPlaybackConfigChanged()
, שהמערכת קוראת לה כשהאודיו
שינויים בהגדרות ההפעלה.
קישוריות
עם חיבור ל-Wi-Fi
במערכת Android 8.0 (רמת API 26) תתווסף תמיכה ב-Wi-Fi Aware, שמבוססת על הפלטפורמה השכנה. המפרט של Awareness Networking (NAN). במכשירים עם ציוד ל-Wi-Fi Aware, אפליקציות ומכשירים בקרבת מקום יכולים לגלות ולתקשר בחיבור Wi-Fi ללא נקודת גישה לאינטרנט. אנחנו עובדים עם החומרה שלנו כדי לשלב את טכנולוגיית Wi-Fi Aware למכשירים כמה שיותר מהר. עבור מידע על שילוב Wi-Fi Aware באפליקציה שלך זמין במאמר Wi-Fi Aware.
Bluetooth
Android 8.0 (רמת API 26) מעשיר את תמיכת ה-Bluetooth של הפלטפורמה על ידי הוספת הקוד הבא תכונות:
- תמיכה בתקן AVRCP 1.4, שמאפשר גלישה בספריית השירים.
- תמיכה בתקן Bluetooth Low-Energy (BLE) 5.0.
- שילוב של קודק Sony LDAC בסטאק Bluetooth.
התאמת מכשיר נלווה
Android 8.0 (רמת API 26) מספקת ממשקי API שמאפשרים להתאים אישית תיבת דו-שיח של בקשת התאמה כשמנסים לבצע התאמה עם מכשירים נלווים Bluetooth, BLE ו-Wi-Fi. מידע נוסף זמין במאמר הבא: מכשיר נלווה התאמה.
למידע נוסף על השימוש ב-Bluetooth ב-Android, אפשר לעיין במאמר מדריך ל-Bluetooth. עבור לשינויים ב-Bluetooth שספציפיים ל-Android 8.0 (רמת API 26), כדאי לעיין הקטע Bluetooth ב- הדף שינויים בהתנהגות ב-Android 8.0.
שיתוף
שיתוף חכם
מערכת Android 8.0 (רמת API 26) לומדת על משתמשים שיתוף בהתאמה אישית העדפות ומבינים טוב יותר כל סוג של תוכן שמתאים אפליקציות שאפשר לשתף איתן. לדוגמה, אם משתמש מצלם תמונה של קבלה, מערכת Android 8.0 יכול להציע אפליקציה למעקב אחר הוצאות; אם המשתמש מצלם תמונת סלפי, האפליקציה תוכל לטפל בתמונה בצורה טובה יותר. מערכת Android 8.0 לומדת באופן אוטומטי את כל אלה בהתאם לדפוסים של המשתמשים העדפות מותאמות אישית.
השיתוף החכם פועל בסוגי תוכן שהם לא image
, כמו
audio
, video
, text
, URL
,
וכו'
כדי להפעיל את השיתוף החכם, צריך להוסיף עד 3 ArrayList
מחרוזת הערות לכוונה שמשתפת את התוכן. ההערות
מתארים את הרכיבים או הנושאים העיקריים בתוכן. הקוד לדוגמה הבא
מראים איך להוסיף הערות ל-Intent:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
מידע מפורט על הערות לשיתוף חכם זמין במאמר
EXTRA_CONTENT_ANNOTATIONS
מסווג טקסט
במכשירים תואמים, אפליקציות יכולות להשתמש במסווג טקסט חדש כדי לבדוק אם
המחרוזת תואמת לסוג ישות ידוע של מסווג, ומקבלים הצעה לבחירה
חלופות. הישויות שזוהו על ידי המערכת כוללות כתובות, כתובות URL,
מספרי טלפון וכתובות אימייל. מידע נוסף זמין במאמר הבא:
TextClassifier
נגישות
Android 8.0 (רמת API 26) תומך בכמה תכונות נגישות חדשות עבור מפתחים שיוצרים שירותי נגישות משלהם:
- קטגוריית עוצמת קול חדשה להתאמה נגישות עוצמת קול.
- טביעת אצבע תנועות כמנגנון קלט.
- רב שפות המרת טקסט לדיבור.
- גרסה מבוססת חומרה נגישות קיצור דרך לגישה מהירה לשירות נגישות מועדף.
- תמיכה עבור המשך תנועות מובנות או רצפים פרוגרמטיים של קווים.
- נגישות לחצן להפעלה של אחת מכמה תכונות נגישות שהופעלו (האפשרות זמינה רק במכשירים שמשתמשים באזור ניווט שעבר עיבוד באמצעות תוכנה).
- סטנדרטי ערכי טווח חד-צדדיים.
- כמה תכונות עבור בעיבוד טקסט יותר בקלות, כולל רמיזות לטקסט ומיקומים של טקסט שמופיע במסך. תווים.
אבטחה ופרטיות
הרשאות
ב-Android 8.0 (רמת API 26) נוספו כמה הרשאות חדשות שקשורות לטלפוניה:
-
ההרשאה
ANSWER_PHONE_CALLS
מאפשרת לאפליקציה לענות שיחות טלפון נכנסות באופן פרוגרמטי. לטיפול בשיחת טלפון נכנסת תוך באפליקציה שלכם, תוכלו להשתמשacceptRingingCall()
. -
ההרשאה
READ_PHONE_NUMBERS
מעניקה לאפליקציה גישת קריאה ל את מספרי הטלפון השמורים במכשיר.
ההרשאות האלה מסווגות בתור
מסוכן
ושניהם חלק
PHONE
קבוצת הרשאות.
ממשקי API חדשים לגישה לחשבון ו-Discovery
מערכת Android 8.0 (רמת API 26) כוללת כמה שיפורים באופן שבו לאפליקציות יש גישה לחשבונות משתמשים. בחשבונות שהם מנהלים, מאמתים יכולים להשתמש במדיניות משלהם כדי להחליט אם להסתיר מהם חשבונות, או לחשוף חשבונות לאפליקציה. מערכת Android עוקבת אחרי אפליקציות שיכולות לגשת לחשבון מסוים.
בגרסאות קודמות של Android, אפליקציות שרצו לעקוב אחרי רשימת
חשבונות המשתמש נאלצו לקבל עדכונים לגבי כל החשבונות, כולל חשבונות עם
מסוגים שלא קשורים אחד לשני. מערכת Android 8.0 מוסיפה את
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
שיטה שמאפשרת לאפליקציות לציין רשימה של סוגי חשבונות
לגבי השינויים בחשבונות.
שינויים ב-API
AccountManager מספק שש שיטות חדשות כדי לעזור למאמתי אימות לנהל אפליקציות יכולות לראות חשבון:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: מגדיר את רמת החשיפה של חבילה וחשבון משתמש ספציפיים משולב.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: קבלת רמת החשיפה של חבילה וחשבון משתמש ספציפיים משולב. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: מאפשר למאמתים לקבל את החשבונות ואת רמות החשיפה של בחבילה הנתונה. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: מאפשרים לאדמינים לקבל ערכי חשיפה מאוחסנים של חשבון נתון. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: מאפשר למאמתים לאתחל את ערכי החשיפה של חשבון. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: הוספה של אוזןOnAccountsUpdateListener
ל- אובייקטAccountManager
. המערכת קוראת ל-listener הזה בכל פעם שרשימת החשבונות במכשיר משתנה.
ב-Android 8.0 (רמת API 26) יש שני ערכים מיוחדים של 'שם חבילה' לציון הרשאות הגישה
רמות עבור אפליקציות שלא הוגדרו באמצעות
setAccountVisibility(android.accounts.Account, java.lang.String, int)
.
PACKAGE_NAME_KEY_LEGACY_VISIBLE
ערך החשיפה חל על אפליקציות שיש להן את
GET_ACCOUNTS
הרשאה, וגרסאות יעד של
פחות מ-Android 8.0, או
החתימות תואמות למאמת החשבונות שמטרגט כל גרסה של Android.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
מספק ערך ברירת מחדל לחשיפה
שלא הוגדרו בעבר ושעבורן
הערך PACKAGE_NAME_KEY_LEGACY_VISIBLE
אינו
הרלוונטי.
למידע נוסף על ממשקי ה-API החדשים לגישה לחשבון ול-Discovery, אפשר לעיין במאמר
הפניה ל-
AccountManager
והקבוצה
OnAccountsUpdateListener
.
בדיקה
בדיקת אינסטרומנטציה
מערכת Android 8.0 (רמת API 26) מספקת את התמיכה הנוספת הבאה לאפליקציה שלך בדיקות אינסטרומנטציה.
הפעלה כנגד תהליכים של אפליקציות שלא מוגדרים כברירת מחדל
עכשיו אפשר לציין שבדיקת אינסטרומנטציה מסוימת צריכה לפעול תהליך מחוץ לתהליך ברירת המחדל של האפליקציה. התצורה הזו שימושית אם שיש באפליקציה כמה פעילויות שרצות בתהליכים שונים.
כדי להגדיר אינסטרומנטציה לתהליך שאינו ברירת מחדל, יש לעבור למניפסט
ואז לקובץ הרצוי
רכיב <instrumentation>
. מוסיפים את
android:targetProcess
ומגדירים את הערך שלו לאחד מ-
הבאים:
- השם של תהליך מסוים.
- רשימה של שמות תהליך שמופרדים בפסיקים.
- תו כללי לחיפוש (
"*"
), שמאפשר לאינסטרומנטציה לפעול מול כל תהליך הפעלה שמריץ קוד בחבילה שצוינה המאפייןandroid:targetPackage
.
בזמן שבדיקת האינסטרומנטציה מתבצעת, אפשר לבדוק איזה תהליך
הוא בודק באמצעות הפעלה של getProcessName()
.
דיווח על התוצאות במהלך בדיקה
עכשיו אפשר לדווח על תוצאות בזמן שבדיקת האינסטרומנטציה מתבצעת,
ולא לאחר מכן, בהתקשרות אל addResults()
.
הדמיה של כוונות לבדיקות
כדי שיהיה קל יותר ליצור בדיקות ממשק משתמש מבודדות ועצמאיות לאפליקציות
פעילויות, Android 8.0 (רמת API 26) מציגה
אמצעי תשלום אחד (onStartActivity()
). אפשר לשנות את השיטה הזו במחלקה משנה מותאמת אישית של
כיתה אחת (Instrumentation.ActivityMonitor
) לטיפול במחלקה מסוימת
את הכוונה שכיתת המבחן שלכם מפעילה.
כשכיתת הבדיקה מפעילה את Intent, השיטה מחזירה stub
אובייקט Instrumentation.ActivityResult
במקום להפעיל
את הכוונה עצמה. אם תשתמשו בהדמיה של הכוונה המדומה בבדיקות שלכם, תוכלו להתמקד
לגבי האופן שבו הפעילות שלכם מתכוננת ומטפלת בכוונתכם להעביר
פעילות אחרת לגמרי או לאפליקציה אחרת לגמרי.
זמן ריצה כלים
אופטימיזציות של פלטפורמה
מערכת Android 8.0 (רמת API 26) מספקת לפלטפורמה זמן ריצה ואופטימיזציות אחרות יובילו לשיפורים בביצועים. האופטימיזציות האלה כוללות איסוף אשפה בעקבות דחיסה בו-זמנית, לשימוש יעיל יותר בזיכרון ובסביבת קוד.
האופטימיזציות האלה מובילות לזמני אתחול מהירים יותר, וגם לביצועים טובים יותר מערכת הפעלה ואפליקציות.
עודכנה תמיכה בשפת Java
במערכת Android 8.0 (רמת API 26) נוספת תמיכה בכמה ממשקי API נוספים של OpenJDK Java:
java.time
מ-OpenJDK 8.java.nio.file
ו-java.lang.invoke
מ-OpenJDK 7.
מידע נוסף על הכיתות והשיטות שנוספו לאחרונה חבילות, ראו את מאמרי העזרה של ה-API.
אם רוצים להשתמש בתכונות השפה Java 8 ב-Android Studio, אפשר להוריד את גרסת התצוגה המקדימה האחרונה.
ממשקי API מעודכנים של Android Framework של ICU4J
Android 8.0 (רמת API 26) מרחיב את
מסגרת של Android לגבי IU4J
ממשקי API – קבוצת משנה של ממשקי ה-API של ICU4J, שבהם מפתחי אפליקציות יכולים
לשימוש במסגרת חבילת android.icu
. ממשקי ה-API האלה משתמשים בנתוני התאמה לשוק המקומי
קיימת במכשיר, כך שתוכל לצמצם את טביעת הרגל הפחמנית שלך על ידי אי הידור
ספריות ICU4J ב-APK.
טבלה 1. גרסאות ICU, CLDR ו-Unicode שבהן נעשה שימוש ב-Android.
רמת ה-API ב-Android | גרסת ה-ICU | גרסת CLDR | גרסת Unicode |
---|---|---|---|
Android 7.0 (רמת API 24), Android 7.1 (רמת API 25) | 56 | 28 | 8.0 |
Android 8.0 (רמת API 26) | 58.2 | 30.0.3 | 9.0 |
אפשר לקרוא מידע נוסף על התאמה לשוק הבינלאומי ב-Android, כולל לתמיכת ICU4J: התאמה לשוק הבינלאומי ב-Android
Android לארגונים
נוספו תכונות ארגוניות וממשקי API חדשים למכשירים שפועלים Android 8.0 (רמת API 26). הסיכום כולל את הנושאים הבאים:
- פרופילי עבודה במכשירים מנוהלים מאפשרים לארגונים להפריד את העבודה מ מידע אישי תוך כדי ניהול של שניהם.
- הקצאת הרשאות API מאפשרת לבעלי מכשירים ולבעלים של פרופילים להקצות אפליקציות לניהול יישומים אחרים.
- שיפורים בחוויית המשתמש בתהליך ההקצאה (כולל שיפורים חדשים) אפשרויות התאמה אישית) מקצרים את זמן ההגדרה.
- אמצעי בקרה חדשים באמצעות Bluetooth, Wi-Fi, גיבוי ואבטחה מאפשרים לארגונים לנהל חלק גדול יותר מהמכשיר. רישום ביומן של פעילות ברשת עוזר לארגונים לעקוב או בעיות.
כדי לקבל מידע נוסף על ממשקי ה-API והתכונות החדשות של Android לארגונים, ראו Android ב-Enterprise.