הגבלות על התחלת פעילויות מהרקע

Android 10 (רמת API 29) והגבלות גבוהות יותר לגבי זמן שבו אפליקציות יכולות להתחיל פעילויות כשהאפליקציה פועלת ברקע. ההגבלות האלה עוזרות לצמצם את ההפרעות למשתמש ומאפשרות לו לשלוט טוב יותר במה שמוצג במסך.

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

הצגת התראות במקום זאת

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

מערכת ההתראות והתזכורות מבוססת-ההתראות מספקת למשתמשים כמה יתרונות:

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

מתי אפליקציות יכולות להפעיל פעילויות

אפליקציות שפועלות ב-Android מגרסה 10 ואילך יכולות להתחיל פעילויות כשמתקיים אחד או יותר מהתנאים הבאים:

  • לאפליקציה יש חלון גלוי, כמו פעילות בחזית.
  • לאפליקציה יש פעילות במקבץ המשימות האחורי של המשימה בחזית.
  • באפליקציה יש פעילות במקבץ האחורי של משימה קיימת במסך 'לאחרונה'.

  • יש באפליקציה פעילות שהתחילה לאחרונה.

  • האפליקציה קראה finish() לגבי פעילות ממש לאחרונה. האפשרות הזו רלוונטית רק אם באפליקציה הייתה פעילות בחזית או פעילות בסטאק העורפי של המשימה בחזית בזמן הקריאה ל-finish().

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

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

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

  • האפליקציה מקבלת PendingIntent שנשלח מאפליקציה אחרת גלויה.

  • האפליקציה מקבלת שידור מערכת שבו האפליקציה אמורה להפעיל ממשק משתמש. דוגמאות: ACTION_NEW_OUTGOING_CALL ו-SECRET_CODE_ACTION. האפליקציה יכולה להתחיל פעילויות למשך כמה שניות אחרי שליחת השידור.

  • האפליקציה משויכת למכשיר חומרה נלווה באמצעות ה-API CompanionDeviceManager. ממשק ה-API הזה מאפשר לאפליקציה להפעיל פעילויות בתגובה לפעולות שהמשתמש מבצע במכשיר המותאם.

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

  • המשתמש מעניק לאפליקציה את ההרשאה SYSTEM_ALERT_WINDOW.

נדרש אישור להפעלת פעילויות מ-PendingIntents

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

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

טבלת Intents בהמתנה
איור 1: תהליך קבלת ההחלטות לגבי השקות של פעילויות ברקע.

על ידי השולח של ה-PendingIntent

אפליקציות שמטרגטות ל-Android מגרסה 14 ואילך שרוצות להפעיל PendingIntent חייבות:

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

כדי להביע הסכמה, האפליקציה צריכה להעביר חבילה של ActivityOptions עם setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) לשיטות PendingIntent.send() או לשיטות דומות.

על ידי היוצר של PendingIntent

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

ברוב המקרים, האפליקציה שמתחילה ב-PendingIntent היא זו שצריך להצטרף אליה. עם זאת, אם האפליקציה הבוראת צריכה להעניק את ההרשאות האלה:

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

כדי להביע הסכמה, האפליקציה צריכה להעביר חבילה של ActivityOptions עם setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) לשיטות PendingIntent.getActivity() או לשיטות דומות.

פרטים נוספים זמינים במסמכי העזרה הרלוונטיים: