שינויים בהתנהגות: אפליקציות שמטרגטות את Android 13 ואילך

כמו בגרסאות קודמות, ב-Android 13 יש שינויים בהתנהגות שעשויים להשפיע על אפליקציה. השינויים הבאים בהתנהגות חלים רק על אפליקציות שמטרגטות Android מגרסה 13 ואילך. אם האפליקציה שלך מטרגטת ל-Android מגרסה 13 ואילך, עליך לשנות את האפליקציה כך שתתמוך בהתנהגויות האלה באופן תקין, במקרים הרלוונטיים.

חשוב גם לבדוק את הרשימה של שינויי ההתנהגות שמשפיעים על כל האפליקציות פועלת על Android 13.

פרטיות

ההרשאה לשליחת התראות משפיעה על המראה של השירות שפועל בחזית

אם המשתמש מכחיש את הרשאה לשליחת התראות, הם לא רואים הודעות שקשורות לשירותים שפועלים בחזית חלונית הזזה להתראות. עם זאת, המשתמשים עדיין רואים הודעות שקשורות לשירותים שפועלים בחזית מנהל המשימות, גם אם ניתנה הרשאה לשליחת התראות, וגם אם לא.

הרשאת זמן ריצה חדשה למכשירי Wi-Fi בקרבת מקום

בגרסאות קודמות של Android, המשתמש צריך להעניק לאפליקציה את ACCESS_FINE_LOCATION הרשאה להשלים מספר תרחישים נפוצים לדוגמה ב-Wi-Fi.

כי למשתמשים קשה לשייך את הרשאות המיקום ל-Wi-Fi פונקציונליות Android 13 (רמת API 33) כוללת הרשאת זמן ריצה NEARBY_DEVICES קבוצת הרשאות לאפליקציות שמנהלות חיבורי מכשיר לגישה בקרבת מקום נקודות בחיבור Wi-Fi. את ההרשאה הזו, NEARBY_WIFI_DEVICES תואם לתרחישים לדוגמה של Wi-Fi, כמו:

  • חיפוש מכשירים בקרבת מקום, כמו מדפסות או מכשירי Cast של מדיה, או התחברות אליהם. תהליך העבודה הזה מאפשר לאפליקציה לבצע משימות מהסוגים הבאים:
    • קבלת מידע על נקודות AP מחוץ לתדר, למשל דרך BLE.
    • איתור מכשירים והתחברות אליהם באמצעות חיבור Wi-Fi Aware, והתחברות באמצעות נקודה לשיתוף אינטרנט (Hotspot) מקומי בלבד.
    • איתור מכשירים והתחברות אליהם באמצעות Wi-Fi ישיר.
  • התחלת חיבור ל-SSID ידוע, למשל מכונית או מכשיר לבית חכם.
  • מפעילים נקודה לשיתוף אינטרנט (Hotspot) באופן מקומי בלבד.
  • טווח למכשירי Wi-Fi Aware בקרבת מקום.

כל עוד האפליקציה לא מסיקה פרטי מיקום פיזי מרשת ה-Wi-Fi ממשקי API, צריך לבקש NEARBY_WIFI_DEVICES במקום ACCESS_FINE_LOCATION לטרגט את Android 13 ואילך ולהשתמש בממשקי API של Wi-Fi. בזמן ההצהרה ההרשאה NEARBY_WIFI_DEVICES, הצהרה חזקה על כך שהאפליקציה אף פעם מסיקה מידע על מיקום פיזי מממשקי API של Wi-Fi. כדי לעשות את זה, מגדירים android:usesPermissionFlags אל neverForLocation. התהליך הזה כמו ב-Android 12 (רמת API 31) ואילך להצהיר שמידע על מכשיר Bluetooth אף פעם לא משמש לצורך המיקום.

בקשת הרשאה לגשת למכשירי Wi-Fi בקרבת מקום.

הרשאות מדיה מפורטות

שני הלחצנים בתיבת הדו-שיח, מלמעלה למטה, הם 'אישור' ו'לא'
  אישור
איור 1. תיבת דו-שיח להרשאות מערכת שהמשתמש רואה כאשר מבקשים את ההרשאה READ_MEDIA_AUDIO.

אם האפליקציה מטרגטת ל-Android 13 ואילך והיא צריכה לגשת לקובצי מדיה שיש לאפליקציות אחרות נוצר, לבקש אחת או יותר מהרשאות המדיה המפורטות הבאות, במקום READ_EXTERNAL_STORAGE הרשאה:

סוג המדיה הרשאה לבקש
תמונות ותמונות READ_MEDIA_IMAGES
סרטונים READ_MEDIA_VIDEO
קובצי אודיו READ_MEDIA_AUDIO

לפני שנכנסים לקובצי מדיה של אפליקציה אחרת, צריך לוודא שהמשתמש העניק הרשאות המדיה המפורטות המתאימות לאפליקציה.

באיור 1 מוצגת אפליקציה שמבקשת את ההרשאה READ_MEDIA_AUDIO.

אם מבקשים גם את ההרשאה READ_MEDIA_IMAGES וגם את הרשאת READ_MEDIA_VIDEO בו-זמנית, רק הרשאת מערכת אחת תופיע תיבת דו-שיח.

אם לאפליקציה שלכם הוענקה בעבר READ_EXTERNAL_STORAGE הרשאה, ואז כל ההרשאות הנדרשות ל-READ_MEDIA_* מוענקות באופן אוטומטי בזמן השדרוג. אפשר להשתמש בפקודת ה-ADB הבאה כדי לבדוק הרשאות משודרגות:

adb shell cmd appops get --uid PACKAGE_NAME

נדרשת הרשאה חדשה כדי להשתמש בחיישנים הגופניים ברקע

ב-Android 13 נוסף המושג 'בזמן השימוש' גישה אל חיישני גוף, כמו דופק, טמפרטורה ואחוז החמצן בדם. הזה מודל הגישה דומה מאוד למודל שהמערכת הגדירה מיקום ב-Android 10 (רמת API 29).

אם האפליקציה מטרגטת את Android 13 ונדרשת גישה לחיישן גופני בזמן הרצה ברקע, חובה להצהיר על BODY_SENSORS_BACKGROUND בהרשאה קיימת BODY_SENSORS הרשאה.

ביצועים וסוללה

ניצול משאבי הסוללה

אם המשתמש מציב את האפליקציה "מוגבל" מדינה בשביל שימוש בסוללה ברקע בזמן שהאפליקציה מטרגטת את Android 13, המערכת לא מספקת את שידור של BOOT_COMPLETED או השידור של LOCKED_BOOT_COMPLETED עד מופעלת מסיבות אחרות.

חוויית משתמש

פקדי מדיה שנגזרים מ-PlaybackState

באפליקציות שמטרגטות ל-Android 13 (רמת API 33) ואילך, המערכת מסיקה פקדי מדיה מ- PlaybackState פעולות. הזה מאפשרת למערכת להציג קבוצה עשירה יותר של אמצעי בקרה עקביים בין טלפונים ומכשירי טאבלט, וגם מתאימה לאופן שבו המדיה הפקדים מוצגים בפלטפורמות אחרות של Android כמו Android Auto Android TV.

באיור 2 מוצגת דוגמה לאופן שבו זה נראה בטלפון ובטאבלט, בהתאמה.

בקרי מדיה במונחים של האופן שבו הם מופיעים במכשירי טלפון וטאבלטים,
            באמצעות דוגמה של טראק לדוגמה שמראה איך הלחצנים עשויים להופיע
איור 2: פקדי מדיה במכשירי טלפון וטאבלט

לפני Android 13, המערכת הציגה עד חמש פעולות מ-MediaStyle התראה לפי הסדר שבו נוספו. במצב קומפקטי — לדוגמה, בהגדרות המהירות המכווצות — עד שלוש פעולות שצוינו באמצעות setShowActionsInCompactView() הוצגו.

החל מ-Android 13, המערכת מציגה עד חמישה לחצני פעולה שמבוססים על בPlaybackState כמו שמתואר בטבלה הבאה. במצב קומפקטי, רק שלוש הראשונות יוצגו משבצות לפעולות. באפליקציות שלא מטרגטות את Android 13 או כאלה שלא כוללים PlaybackState, המערכת תציג פקדים שמבוססים על הרשימה Action נוספה להתראה MediaStyle כפי שמתואר בפסקה הקודמת.

משבצת פעולה קריטריונים
1 הפעלה המדינה הנוכחית של PlaybackState היא אחת מהאפשרויות הבאות:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
סימן גרפי שמוצג בזמן טעינה המדינה הנוכחית של PlaybackState היא אחת מהאפשרויות הבאות:
  • STATE_CONNECTING
  • STATE_BUFFERING
השהיה המדינה הנוכחית של PlaybackState היא אף אחת מהאפשרויות שלמעלה.
2 הקודם PlaybackState פעולות כוללות ACTION_SKIP_TO_PREVIOUS.
בהתאמה אישית PlaybackState פעולות לא כוללות ACTION_SKIP_TO_PREVIOUS ו-PlaybackState פעולות מותאמות אישית כוללות פעולה מותאמת אישית שעדיין לא בוצעה.
ריק PlaybackState התוספות כוללות ערך בוליאני true עבור המפתח SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV.
3 הבא PlaybackState פעולות כוללות ACTION_SKIP_TO_NEXT.
בהתאמה אישית PlaybackState פעולות לא כוללות ACTION_SKIP_TO_NEXT ו-PlaybackState פעולות מותאמות אישית כוללות פעולה מותאמת אישית שעדיין לא בוצעה.
ריק PlaybackState התוספות כוללות ערך בוליאני true עבור המפתח SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT.
4 בהתאמה אישית PlaybackState פעולות מותאמות אישית כוללות פעולה מותאמת אישית שעדיין לא בוצעה.
5 בהתאמה אישית PlaybackState פעולות מותאמות אישית כוללות פעולה מותאמת אישית שעדיין לא בוצעה.

הפעולות המותאמות אישית מופיעות לפי הסדר שבו הן נוספו PlaybackState

ערכת הצבעים של האפליקציה מוחלת באופן אוטומטי על תוכן WebView

באפליקציות שמטרגטות ל-Android 13 (רמת API 33) ואילך, setForceDark() הוצאה משימוש, וכתוצאה מכך לא תהיה תפעול אם קוראים לשיטה.

במקום זאת, רכיב WebView תמיד מגדיר שאילתת המדיה prefers-color-scheme בהתאם למאפיין העיצוב של האפליקציה, isLightTheme. בעוד מילים, אם isLightTheme הוא true או לא צוין, prefers-color-scheme הוא light אחרת, המספר הוא dark. משמעות התנהגות זו היא סגנון בהיר או כהה מוחל באופן אוטומטי כדי להתאים לעיצוב של האפליקציה אם תומך בכך.

ברוב האפליקציות, ההתנהגות החדשה צריכה להחיל את סגנונות האפליקציה המתאימים באופן אוטומטי, אבל מומלץ לבדוק את האפליקציה כדי לאתר מקרים שבהם יכול להיות ששלט באופן ידני בהגדרות של המצב הכהה.

אם עדיין צריך להתאים אישית את התנהגות עיצוב הצבעים של האפליקציה, אפשר להשתמש setAlgorithmicDarkeningAllowed() במקום זאת. כדי לשמור על תאימות לאחור עם גרסאות Android קודמות: מומלץ להשתמש בפונקציה המקבילה setAlgorithmicDarkeningAllowed() ב-AndroidX.

במסמכי התיעוד של השיטה מוסבר איך אפשר לבצע את הפעולות הבאות בתוך האפליקציה בהתאם targetSdkVersion ועיצוב הגדרות.

קישוריות

BluetoothAdapter#enable() ו-BluetoothAdapter#disable() הוצאו משימוש

באפליקציות שמטרגטות ל-Android 13 (רמת API 33) ואילך, BluetoothAdapter#enable() ו- BluetoothAdapter#disable() השיטות הוצאו משימוש ותמיד הוצאו משימוש החזרה false.

סוגי האפליקציות הבאים לא נכללים בשינויים האלה:

  • אפליקציות של בעלי המכשיר
  • אפליקציות של בעלי הפרופיל
  • אפליקציות מערכת

Google Play Services

נדרשת הרשאה למזהה הפרסום

אפליקציות שמשתמשות בפרסום באמצעות Google Play Services ID וגם גרסת היעד של Android 13 (רמת API 33) ומעלה להצהיר על ההרשאה הרגילה של AD_ID באפליקציה שלהם קובץ מניפסט, באופן הבא:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

אם האפליקציה לא כוללת הצהרה על ההרשאה הזו לגבי טירגוט ל-Android 13 או מזהה הפרסום יוסר באופן אוטומטי ומוחלף במחרוזת. של אפסים.

אם האפליקציה שלך משתמשת בערכות SDK שמצהירות על ההרשאה AD_ID בספרייה לאחר מכן, ההרשאה ממוזגת עם קובץ המניפסט של האפליקציה כברירת מחדל. במקרה כזה, אין צורך להצהיר על ההרשאה באפליקציה בקובץ Manfiest.

אפשר לקרוא מידע נוסף במאמר פרסום ID אינץ' את העזרה של Play Console.

הגבלות מעודכנות שלא קשורות ל-SDK

מערכת Android 13 כוללת רשימות מעודכנות של רכיבי SDK מוגבלים שאינם SDK שמבוססים על שיתוף פעולה עם מפתחי Android, בדיקה פנימית. כשהדבר אפשרי, אנחנו מוודאים שחלופות ציבוריות לפני שנגביל ממשקים שאינם SDK.

אם האפליקציה לא מטרגטת את Android 13, חלק מהשינויים האלה עשויה להשפיע עליך באופן מיידי. אבל למרות שכרגע אפשר להשתמש בחלק ממשקים שאינם SDK (בהתאם ל-API המטורגט של האפליקציה רמה), שימוש בכל שיטה או שדה שאינם SDK תמיד עלול לגרום לקריסה אפליקציה.

אם אתם לא בטוחים אם האפליקציה שלכם משתמשת בממשקים שאינם SDK, אפשר לבדוק את אפליקציה כדי לגלות את התשובה. אם האפליקציה שלך מסתמכת על ממשקים שאינם SDK, יש להתחיל לתכנן העברה לחלופות SDK. עם זאת, אנחנו מבינים שחלק מהאפליקציות תרחישים לדוגמה חוקיים לשימוש בממשקים שאינם SDK. אם לא מוצאים דרך חלופית לשימוש בממשק שאינו SDK עבור תכונה באפליקציה, צריך לבקש API ציבורי חדש.

למידע נוסף על השינויים בגרסה הזו של Android, אפשר לעיין במאמר עדכונים ל- הגבלות על הממשק שאינן SDK ב-Android 13. מידע נוסף על ממשקים שאינם SDK באופן כללי זמין במאמר הגבלות על ממשקים שאינם SDK. ממשקים.