החל מ-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- דרישות מוקדמות להפעלה
- ללא
- תיאור
פעולות העברת נתונים, כמו:
- העלאה או הורדה של נתונים
- פעולות גיבוי ושחזור
- פעולות ייבוא או ייצוא
- אחזור נתונים
- עיבוד קבצים מקומי
- העברת נתונים בין מכשיר לבין הענן דרך רשת
- אפשרויות אחרות
מידע מפורט זמין במאמר חלופות לשירותים להעברת נתונים ברקע.
בריאות
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypehealth- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_HEALTH- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- דרישות מוקדמות בסביבת זמן הריצה
לפחות אחד מהתנאים הבאים חייב להתקיים:
מצהירים על ההרשאה
HIGH_SAMPLING_RATE_SENSORSבמניפסט.צריך לבקש לפחות אחת מההרשאות הבאות בסביבת זמן הריצה, ולקבל אותה:
- תיאור
תרחישים לדוגמה לטווח ארוך לתמיכה באפליקציות בקטגוריית הכושר, כמו מכשירי מעקב אחר אימונים.
מיקום
- Foreground service type to declare in manifest under
android:foregroundServiceTypelocation- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
מדיה
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaPlayback- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Runtime prerequisites
- None
- Description
Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.
- Alternatives
If you're showing picture-in-picture video, use Picture-in-Picture mode.
המדיה נמצאת בעיבוד
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
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 ומטה. במכשירים עם הגרסאות האלה, אם שירות עיבוד מדיה מגיע למועד הקצוב לתפוגה, המערכת מאחסנת את האפליקציה במטמון באופן מיידי. לכן, האפליקציה לא צריכה להמתין לקבלת התראה על תפוגת הזמן. במקום זאת, היא צריכה לסיים את השירות שפועל בחזית או לשנות אותו לשירות שפועל ברקע בהקדם האפשרי.
הקרנת מדיה
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProjection- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Runtime prerequisites
Call the
createScreenCaptureIntent()method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection().- Description
Project content to non-primary display or external device using the
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
מיקרופון
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypemicrophone- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_MICROPHONE- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- דרישות מוקדמות להפעלה
שולחים בקשה להרשאת זמן ריצה
RECORD_AUDIOומקבלים אותה.- תיאור
להמשיך להקליט מהמיקרופון ברקע, למשל באפליקציות להקלטת קול או באפליקציות תקשורת.
שיחת טלפון
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypephoneCall- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_PHONE_CALL- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- דרישות מוקדמות להפעלה
לפחות אחד מהתנאים הבאים צריך להתקיים:
- האפליקציה הצהירה על ההרשאה
MANAGE_OWN_CALLSבקובץ המניפסט שלה.
- האפליקציה הצהירה על ההרשאה
- האפליקציה מוגדרת כאפליקציית ברירת המחדל לחיוג דרך התפקיד
ROLE_DIALER.
- האפליקציה מוגדרת כאפליקציית ברירת המחדל לחיוג דרך התפקיד
- תיאור
להמשיך שיחה פעילה באמצעות ממשקי ה-API של
ConnectionService.- אפשרויות אחרות
אם אתם צריכים להתקשר בטלפון, בשיחת וידאו או ב-VoIP, כדאי להשתמש בספרייה
android.telecom.כדאי להשתמש ב-
CallScreeningServiceכדי לסנן שיחות.
העברת הודעות מרחוק
- Foreground service type to declare in manifest under
android:foregroundServiceTyperemoteMessaging- Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- Runtime prerequisites
- None
- Description
- Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.
שירות קצר
- 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>
פטור ממערכת
- סוג השירות שפועל בחזית שצריך להצהיר עליו במניפסט בקטע
android:foregroundServiceTypesystemExempted- הרשאה להצהרה במניפסט
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- קבוע להעברה אל
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- דרישות מוקדמות של זמן ריצה
- ללא
- תיאור
ההרשאה הזו שמורה לאפליקציות של המערכת ולשילובים ספציפיים של המערכת, כדי להמשיך להשתמש בשירותים שפועלים בחזית.
כדי להשתמש בסוג הזה, האפליקציה צריכה לעמוד לפחות באחד מהקריטריונים הבאים:
- המכשיר במצב הדגמה
- האפליקציה היא בעלים של המכשיר
- האפליקציה היא בעלים של פרופיל
- אפליקציות בטיחות עם התפקיד
ROLE_EMERGENCY - אפליקציות לניהול מכשירים
- אפליקציות עם הרשאה
SCHEDULE_EXACT_ALARMאוUSE_EXACT_ALARM אפליקציות VPN (שמוגדרות באמצעות הגדרות > רשת ואינטרנט > VPN)
אחרת, הצהרה על הסוג הזה גורמת למערכת להציג
ForegroundServiceTypeNotAllowedException.
אכיפת המדיניות של Google Play בנוגע לשימוש בסוגים של שירותים שפועלים בחזית
אם האפליקציה שלכם מטרגטת את Android מגרסה 14 ואילך, תצטרכו להצהיר על סוגי השירותים של האפליקציה בחזית בדף 'תוכן האפליקציה' ב-Play Console (Policy (מדיניות) > App content (תוכן האפליקציה)). מידע נוסף על הצהרת סוגי השירותים שפועלים בחזית ב-Play Console זמין במאמר הסבר על שירותים שפועלים בחזית ועל הדרישות לגבי כוונות במסך מלא.