Android 14 (API 34) made android:foregroundServiceType a hard requirement — a service that starts as a foreground service without a declared type throws a MissingForegroundServiceTypeException at runtime and crashes immediately on all Android 14+ devices. As of 2026, Android 14+ accounts for the majority of active Android installs. This is not a review rejection issue; it is a production crash that manifests the moment a user's device upgrades to Android 14. Libraries that depend on foreground services — audio players (react-native-track-player), background location (react-native-background-geolocation), and background sync (expo-background-fetch) — are all affected.
Low as a submission issue because Google Play does not catch it pre-publication, but the runtime crash on Android 14+ devices makes it a production reliability issue at scale.
Add android:foregroundServiceType to each foreground service in android/app/src/main/AndroidManifest.xml:
<service
android:name=".TrackPlayerService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" />
Add the corresponding permission declaration above <application>:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
For Expo Managed Workflow, use a config plugin in app.config.ts to inject the service type attribute, since app.json does not expose this field directly. Test on an Android 14 emulator (API 34) or physical device after making the change — foreground service crashes reproduce immediately in development.
app-store-metadata-listing.compliance-declarations.foreground-serviceslowandroid/app/src/main/AndroidManifest.xml for <service> elements. Starting with Android 14 (API 34), foreground services require an explicit android:foregroundServiceType attribute. Also check for the corresponding <uses-permission> for each service type (e.g., FOREGROUND_SERVICE_LOCATION, FOREGROUND_SERVICE_CAMERA, FOREGROUND_SERVICE_MICROPHONE). In React Native projects with Expo, check app.json for expo.android.permissions that include foreground service permissions. Common libraries that use foreground services: expo-background-fetch, expo-task-manager, react-native-background-actions, react-native-track-player, react-native-background-geolocation. If these libraries are present, verify that android:foregroundServiceType is declared. Valid types: camera, connectedDevice, dataSync, health, location, mediaPlayback, mediaProjection, microphone, phoneCall, remoteMessaging, shortService, specialUse, systemExempted. Count all instances found and enumerate each.<service> elements with foreground service behavior have an explicit android:foregroundServiceType attribute matching their use case; required permissions are declared; or no foreground services are used. At least 1 implementation must be confirmed.<service> element is present that starts as a foreground service (evident from the library type) but lacks android:foregroundServiceType when targetSdkVersion is 34 or higher.<service> elements in the manifest."react-native-track-player detected but no android:foregroundServiceType='mediaPlayback' declared in AndroidManifest.xml — required for targetSdkVersion 34+".foregroundServiceType causes a crash on Android 14+ devices when the service is started.
android:foregroundServiceType to each foreground service declaration in AndroidManifest.xml:
<service
android:name=".TrackPlayerService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" />
<application> tag:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
app.json and use a config plugin to set the service type