Google Nearby reduce el rendimiento de WiFi 2.4GHz al interferir con Bluetooth
Tengo un Fairphone FP3+ en el que llevo observando problemas de rendimiento con WiFi 2.4GHz cuando está habilitado al mismo tiempo que Bluetooth. Llegaba como máximo a 4Mbps, cuando lo normal es 41Mbps (banda de 20Mhz). Con 5Ghz no hay problema pero no me cubre todos los puntos de mi vivienda. Necesito Bluetooth para una Mi Band. Estoy en Android 11 rooteado.
Hace tiempo, me di cuenta de que deshabilitando la Localización en Android se solucionaba. En su momento leí que pudiera tener relación con el servicio «Nearby» de Google GMS, para comunicar dispositivos cercanos. Está continuamente escaneando por Bluetooth. Desafortunadamente, ahora deshabilitar la localización ya no surtía efecto. Curiosamente, al habilitar adicionalmente «Battery Saver» el rendimiento era el correcto. Mirando Logcat vi que al habilitar Battery Saver se desactivaba NearbyConnections:

Busqué el servicio de Nearby:
j@arai ~ % adb shell dumpsys activity services | grep nearby [130]
* ServiceRecord{364cd30 u0 com.google.android.gms/.nearby.sharing.ReceiveSurfaceService}
intent={cmp=com.google.android.gms/.nearby.sharing.ReceiveSurfaceService}
intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.presence.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.presence.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.sharing.START_SERVICE cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
intent={act=com.google.android.gms.nearby.connection.service.START pkg=com.google.android.gms}
intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.uwb.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
* ServiceRecord{b902da9 u0 com.google.android.gms/.nearby.sharing.SendSurfaceService}
intent={cmp=com.google.android.gms/.nearby.sharing.SendSurfaceService}
* ServiceRecord{489c590 u0 com.google.android.gms/.nearby.discovery.service.DiscoveryService}
intent={act=com.google.android.gms.nearby.discovery:ACTION_PERMISSION_CHANGE cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
intent={act=com.google.android.gms.nearby.discovery:ACTION_DEVICES_LIST_ACTIVITY cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
intent={act=com.google.android.gms.nearby.discovery:ACTION_DEVICES_LIST_SLICE cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
intent={act=com.google.android.gms.nearby.discovery:ACTION_ACCOUNT_SETTING cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
Busqué información sobre DiscoveryService
:
255|FP3:/ # pm query-services com.google.android.gms/.nearby.discovery.service.DiscoveryService
1 services found:
Service #0:
priority=0 preferredOrder=0 match=0x0 specificIndex=-1 isDefault=false
ServiceInfo:
name=com.google.android.gms.nearby.discovery.service.DiscoveryService
packageName=com.google.android.gms
processName=com.google.android.gms.persistent
enabled=true exported=true directBootAware=false
permission=com.google.android.gms.permission.NEARBY_START_DISCOVERER
flags=0x0
ApplicationInfo:
name=co.g.App
packageName=com.google.android.gms
labelRes=0x7f150683 nonLocalizedLabel=null icon=0x7f0802b3 banner=0x0
className=co.g.App
processName=com.google.android.gms
taskAffinity=com.google.android.gms
uid=10125 flags=0xa0cabec5 privateFlags=0xa8089118 theme=0x0
requiresSmallestWidthDp=0 compatibleWidthLimitDp=0 largestWidthLimitDp=0
sourceDir=/data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/base.apk
splitSourceDirs=[/data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_CronetDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteLoader_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteModulesA_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteModulesC_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_GoogleCertificates_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_MapsDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_MeasurementDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.en.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.es.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.ja.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.xxhdpi.apk]
seinfo=default:privapp:targetSdkVersion=30
seinfoUser=:complete
dataDir=/data/user/0/com.google.android.gms
deviceProtectedDataDir=/data/user_de/0/com.google.android.gms
credentialProtectedDataDir=/data/user/0/com.google.android.gms
sharedLibraryFiles=[/system/framework/org.apache.http.legacy.jar, /apex/com.android.extservices/javalib/android.ext.adservices.jar, /system/framework/com.android.media.remotedisplay.jar, /system/framework/com.android.location.provider.jar]
splitClassLoaderNames=[dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, null, null, null, null]
enabled=true minSdkVersion=30 targetSdkVersion=34 versionCode=244738022 targetSandboxVersion=1
manageSpaceActivityName=co.g.Space
supportsRtl=true
fullBackupContent=true
crossProfile=false
networkSecurityConfigRes=0x7f190095
category=7
HiddenApiEnforcementPolicy=2
usesNonSdkApi=false
allowsPlaybackCapture=true
Aquí encontré cómo deshabilitarlo:
FP3:/data/user/0/com.google.android.gms/files/nearby # pm disable com.google.android.gms/.nearby.sharing.SendSurfaceService
Component {com.google.android.gms/com.google.android.gms.nearby.sharing.SendSurfaceService} new state: disabled
La barra entre gms
y .nearby
es correcta, no es una errata.
De momento funciona bien. He comprobado que después de reiniciar sigue yendo bien. ¡Cruzo los dedos!
ACTUALIZACIÓN: Al día siguiente se ha vuelto a activar automáticamente el proceso de Nearby, pero ahora al desactivar Localización sí que se solventa el problema, que es el comportamiento que recordaba de hace tiempo.