החל מ-Android 14 (רמת API 34), צריך להצהיר על סוג שירות מתאים לכל שירות שפועל בחזית. כלומר, אתם צריכים להצהיר על סוג השירות במניפסט של האפליקציה, וגם לבקש את ההרשאה המתאימה לשירות שפועל בחזית עבור הסוג הזה (בנוסף לבקשת ההרשאה FOREGROUND_SERVICE). בנוסף, בהתאם לסוג השירות שפועל בחזית, יכול להיות שתצטרכו לבקש הרשאות בזמן ריצה לפני שתפעילו את השירות.
מצלמה
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceType camera- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_CAMERA- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- דרישות מוקדמות בזמן ריצה
שליחת בקשה להרשאת זמן ריצה של
CAMERAוקבלת אישור- תיאור
המשך גישה למצלמה מהרקע, למשל באפליקציות של וידאו צ'אט שמאפשרות ריבוי משימות.
המכשיר המחובר
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypeconnectedDevice- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_CONNECTED_DEVICE- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- דרישות מוקדמות בסביבת זמן הריצה
לפחות אחד מהתנאים הבאים חייב להתקיים:
צריך להצהיר על לפחות אחת מההרשאות הבאות במניפסט:
צריך לבקש לפחות אחת מההרשאות הבאות בסביבת זמן הריצה, ולקבל אותה:
התקשרו למספר
UsbManager.requestPermission()
- תיאור
אינטראקציות עם מכשירים חיצוניים שדורשים חיבור Bluetooth, NFC, IR, USB או חיבור לרשת.
- אפשרויות אחרות
אם באפליקציה שלכם יש צורך לבצע העברה רציפה של נתונים למכשיר חיצוני, כדאי להשתמש במקום זאת במנהל המכשיר הנלווה. אתם יכולים להשתמש ב-companion device presence API כדי לעזור לאפליקציה להמשיך לפעול בזמן שהמכשיר הנלווה נמצא בטווח.
אם האפליקציה שלכם צריכה לסרוק מכשירי Bluetooth, כדאי להשתמש ב-Bluetooth scan API במקום זאת.
סנכרון נתונים
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypedataSync- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_DATA_SYNC- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- דרישות מוקדמות בזמן ריצה
- ללא
- תיאור
פעולות העברת נתונים, כמו:
- העלאה או הורדה של נתונים
- פעולות גיבוי ושחזור
- פעולות ייבוא או ייצוא
- אחזור נתונים
- עיבוד קבצים מקומיים
- העברת נתונים בין מכשיר לבין הענן דרך רשת
- אפשרויות אחרות
מידע מפורט זמין במאמר חלופות לשירותי סנכרון נתונים שפועלים בחזית.
בריאות
- Foreground service type to declare in manifest under
android:foregroundServiceTypehealth- Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- Runtime prerequisites
At least one of the following conditions must be true:
Declare the
HIGH_SAMPLING_RATE_SENSORSpermission in your manifest.Request and be granted at least one of the following runtime permissions:
BODY_SENSORSon API 35 and lowerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
מיקום
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypelocation- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_LOCATION- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- דרישות מוקדמות בסביבת זמן הריצה
המשתמש צריך להפעיל את שירותי המיקום, והאפליקציה צריכה לקבל לפחות אחת מההרשאות הבאות בסביבת זמן הריצה:
- תיאור
תרחישים לדוגמה לטווח ארוך שדורשים גישה למיקום, כמו ניווט ושיתוף מיקום.
- אפשרויות אחרות
אם אתם רוצים שהאפליקציה תופעל כשהמשתמש מגיע למיקומים ספציפיים, מומלץ להשתמש ב-Geofence API במקום ב-Location API.
מדיה
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypemediaPlayback- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_MEDIA_PLAYBACK- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- דרישות מוקדמות בזמן ריצה
- ללא
- תיאור
להמשיך להפעיל אודיו או סרטון ברקע. תמיכה בפונקציונליות של הקלטת וידאו דיגיטלית (DVR) ב-Android TV.
- אפשרויות אחרות
אם אתם מציגים סרטון במצב 'תמונה בתוך תמונה', אתם צריכים להשתמש במצב 'תמונה בתוך תמונה'.
המדיה נמצאת בעיבוד
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypemediaProcessing- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_MEDIA_PROCESSING- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- דרישות מוקדמות בסביבת זמן הריצה
- ללא
- תיאור
שירות לביצוע פעולות שדורשות זמן רב בנכסי מדיה, כמו המרת מדיה לפורמטים שונים. המערכת מאפשרת לשירות הזה לפעול למשך זמן מוגבל. בנסיבות רגילות, מגבלת הזמן הזו היא 6 שעות מתוך 24 שעות. (המגבלה הזו משותפת לכל
mediaProcessingהשירותים של האפליקציה בחזית).האפליקציה צריכה להפסיק באופן ידני את שירות עיבוד המדיה בתרחיש הבא:
- כשפעולת ההמרה מסתיימת או מגיעה למצב של כשל, צריך לגרום לשירות לקרוא ל-
Service.stopForeground()ול-Service.stopSelf()כדי להפסיק את השירות לגמרי.
- כשפעולת ההמרה מסתיימת או מגיעה למצב של כשל, צריך לגרום לשירות לקרוא ל-
אם חלפו פרק הזמן של הזמן הקצוב לתפוגה, המערכת קוראת לשיטה
Service.onTimeout(int, int)של השירות. בשלב הזה, לשירות יש כמה שניות כדי להתקשר אלService.stopSelf(). אם השירות לא קורא ל-Service.stopSelf(), תתרחש הודעת ANR עם הודעת השגיאה הבאה: "A foreground service of <fgs_type> did not stop within its timeout: <component_name>".הערה: השדה
Service.onTimeout(int, int)לא זמין ב-Android מגרסה 14 ומטה. במכשירים עם הגרסאות האלה, אם שירות עיבוד מדיה מגיע למועד הקצוב לתפוגה, המערכת מאחסנת את האפליקציה במטמון באופן מיידי. לכן, האפליקציה לא צריכה להמתין לקבלת התראה על תפוגת הזמן. במקום זאת, היא צריכה לסיים את השירות שפועל בחזית או לשנות אותו לשירות שפועל ברקע בהקדם האפשרי.
הקרנת מדיה
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypemediaProjection- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_MEDIA_PROJECTION- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- דרישות מוקדמות בזמן ריצה
מבצעים קריאה ל-method
createScreenCaptureIntent()לפני שמפעילים את השירות שפועל בחזית. במקרה כזה, המשתמש יקבל הודעה על הרשאה, והוא יצטרך לאשר את ההרשאה כדי שתוכלו ליצור את השירות.אחרי שיוצרים את שירות הפעילות ברקע, אפשר להפעיל את
MediaProjectionManager.getMediaProjection().- תיאור
הצגת תוכן ממכשיר חיצוני או ממסך שאינו המסך הראשי באמצעות ממשקי ה-API
MediaProjection. התוכן הזה לא חייב להיות תוכן מדיה בלבד.- אפשרויות אחרות
כדי להפעיל סטרימינג של מדיה למכשיר אחר, צריך להשתמש ב-Google Cast SDK.
מיקרופון
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypemicrophone- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_MICROPHONE- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- דרישות מוקדמות בזמן ריצה
שולחים בקשה להרשאה
RECORD_AUDIOבתחילת ההפעלה ומקבלים אותה.- תיאור
המשך הקלטה מהמיקרופון ברקע, למשל באפליקציות להקלטת קול או באפליקציות תקשורת.
שיחת טלפון
- Foreground service type to declare in manifest under
android:foregroundServiceTypephoneCall- Permission to declare in your manifest
FOREGROUND_SERVICE_PHONE_CALL- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Runtime prerequisites
At least one of these conditions must be true:
- App has declared the
MANAGE_OWN_CALLSpermission in its manifest file.
- App has declared the
- App is the default dialer app through the
ROLE_DIALERrole.
- App is the default dialer app through the
- Description
Continue an ongoing call using the
ConnectionServiceAPIs.- Alternatives
If you need to make phone, video, or VoIP calls, consider using the
android.telecomlibrary.Consider using
CallScreeningServiceto screen calls.
העברת הודעות מרחוק
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTyperemoteMessaging- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_REMOTE_MESSAGING- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- דרישות מוקדמות בסביבת זמן הריצה
- ללא
- תיאור
- העברת הודעות טקסט ממכשיר אחד למכשיר אחר. מאפשרת למשתמשים להמשיך את משימות ההודעות שלהם כשהם עוברים בין מכשירים.
שירות קצר
- Foreground service type to declare in manifest under
android:foregroundServiceTypeshortService- Permission to declare in your manifest
- None
- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- Runtime prerequisites
- None
- Description
Quickly finish critical work that cannot be interrupted or postponed.
This type has some unique characteristics:
- Can only run for a short period of time (about 3 minutes).
- No support for sticky foreground services.
- Cannot start other foreground services.
- Doesn't require a type-specific permission, though it still
requires the
FOREGROUND_SERVICEpermission. - A
shortServicecan only change to another service type if the app is currently eligible to start a new foreground service. - A foreground service can change its type to
shortServiceat any time, at which point the timeout period begins.
The timeout for shortService begins from the moment that
Service.startForeground()is called. The app is expected to callService.stopSelf()orService.stopForeground()before the timeout occurs. Otherwise, the newService.onTimeout()is called, giving apps a brief opportunity to callstopSelf()orstopForeground()to stop their service.A short time after
Service.onTimeout()is called, the app enters a cached state and is no longer considered to be in the foreground, unless the user is actively interacting with the app. A short time after the app is cached and the service has not stopped, the app receives an ANR. The ANR message mentionsFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement theService.onTimeout()callback.The
Service.onTimeout()callback doesn't exist on Android 13 and lower. If the same service runs on such devices, it doesn't receive a timeout, nor does it ANR. Make sure that your service stops as soon as it finishes the processing task, even if it hasn't received theService.onTimeout()callback yet.It's important to note that if the timeout of the
shortServiceis not respected, the app will ANR even if it has other valid foreground services or other app lifecycle processes running.If an app is visible to the user or satisfies one of the exemptions that allow foreground services to be started from the background, calling
Service.StartForeground()again with theFOREGROUND_SERVICE_TYPE_SHORT_SERVICEparameter extends the timeout by another 3 minutes. If the app isn't visible to the user and doesn't satisfy one of the exemptions, any attempt to start another foreground service, regardless of type, causes aForegroundServiceStartNotAllowedException.If a user disables battery optimization for your app, it's still affected by the timeout of shortService FGS.
If you start a foreground service that includes the
shortServicetype and another foreground service type, the system ignores theshortServicetype declaration. However, the service must still adhere to the prerequisites of the other declared types. For more information, see the Foreground services documentation.
שימוש מיוחד
- Foreground service type to declare in manifest under
android:foregroundServiceTypespecialUse- Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
- None
- Description
Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
הוחרג על ידי המערכת
- Foreground service type to declare in manifest under
android:foregroundServiceTypesystemExempted- Permission to declare in your manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Runtime prerequisites
- None
- Description
Reserved for system applications and specific system integrations, to continue to use foreground services.
To use this type, an app must meet at least one of the following criteria:
- Device is in demo mode state
- App is a Device Owner
- App is a Profiler Owner
- Safety Apps that have the
ROLE_EMERGENCYrole - Device Admin apps
- Apps holding
SCHEDULE_EXACT_ALARMorUSE_EXACT_ALARMpermission VPN apps (configured using Settings > Network & Internet > VPN)
Otherwise, declaring this type causes the system to throw a
ForegroundServiceTypeNotAllowedException.
אכיפת המדיניות של Google Play בנוגע לשימוש בסוגים של שירותים שפועלים בחזית
אם האפליקציה שלכם מטרגטת את Android מגרסה 14 ואילך, תצטרכו להצהיר על סוגי השירותים של האפליקציה בחזית בדף 'תוכן האפליקציה' ב-Play Console (Policy (מדיניות) > App content (תוכן האפליקציה)). מידע נוסף על הצהרת סוגי השירותים שפועלים בחזית ב-Play Console זמין במאמר הסבר על שירותים שפועלים בחזית ועל הדרישות לגבי כוונות במסך מלא.