Support constrained satellite networks
For Android 16 and later, declare constrained-network support in the app manifest and make network behavior tolerate low bandwidth, high latency, and interruptions. The declaration makes an app eligible; it does not guarantee carrier support.
Required
1. Declare support in the manifest
Add the satellite data optimization property to the final app's <application> element. Use the exact package name as the value. This declaration belongs to the app manifest, not a library.
AndroidManifest.xml
<application
android:label="@string/app_name">
<meta-data
android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="com.example.yourapp" />
</application> Verify the declaration in the released APK before shipping.
If you build custom network requests
2. Handle constrained network requests
Apps with custom ConnectivityManager or NetworkRequest logic must not require an unconstrained network. Remove that requirement and branch from the transport and capabilities Android reports.
Kotlin
val request = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED)
.build()
fun shouldOptimizeForSatellite(capabilities: NetworkCapabilities) =
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE) ||
!capabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
) Keep payloads small, queue work, make retries resumable, and limit background transfers.
Optional / apps using FCM
3. Enable constrained FCM delivery
If your app uses Firebase Cloud Messaging, set the Android-specific flag on messages that should be delivered over a constrained network.
FCM message payload
{
"message": {
"token": "DEVICE_TOKEN",
"data": { "sync": "requested" },
"android": {
"bandwidth_constrained_ok": true
}
}
} Before release
4. Test on a constrained network
Use an Android 16 device or emulator configuration that exposes constrained-network behavior. Check payload size, timeouts, retries, queued work, and recovery after the connection disappears.
Canonical references