Cambios en el comportamiento: apps orientadas a Android 16 o versiones posteriores

Al igual que las versiones anteriores, Android 16 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican exclusivamente a las apps orientadas a Android 16 o versiones posteriores. Si tu app está orientada a Android 16 o versiones posteriores, debes modificarla para que admita estos comportamientos, cuando corresponda.

Asegúrate de revisar también la lista de cambios en el comportamiento que afectan a todas las apps que se ejecutan en Android 16, independientemente de targetSdkVersion de la app.

Experiencia del usuario y la IU del sistema

Android 16 (nivel de API 36) incluye los siguientes cambios que tienen como objetivo crear una experiencia del usuario más coherente e intuitiva.

Se quita la inhabilitación de borde a borde

Android 15 aplicó el diseño de borde a borde para las apps orientadas a Android 15 (nivel de API 35), pero tu app podía inhabilitarlo configurando R.attr#windowOptOutEdgeToEdgeEnforcement como true. En el caso de las apps orientadas a Android 16 (nivel de API 36), R.attr#windowOptOutEdgeToEdgeEnforcement dejó de estar disponible y se inhabilitó, y tu app no puede inhabilitar el diseño de borde a borde.

  • Si tu app está orientada a Android 16 (nivel de API 36) y se ejecuta en un dispositivo Android 15, R.attr#windowOptOutEdgeToEdgeEnforcement sigue funcionando.
  • Si tu app está orientada a Android 16 (nivel de API 36) y se ejecuta en un dispositivo Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement está inhabilitado.

Para realizar pruebas en Android 16, asegúrate de que tu app admita el diseño de borde a borde y quita cualquier uso de R.attr#windowOptOutEdgeToEdgeEnforcement para que tu app también admita el diseño de borde a borde en un dispositivo Android 15. Para admitir el diseño de borde a borde, consulta la guía de Compose y Views.

Se requiere migración o inhabilitación para el botón Atrás predictivo

对于以 Android 16(API 级别 36)或更高版本为目标平台且在 Android 16 或更高版本的设备上运行的应用,预测性返回系统动画(返回主屏幕、跨任务和跨 activity)默认处于启用状态。此外,系统不再调用 onBackPressed,也不再调度 KeyEvent.KEYCODE_BACK

如果您的应用会拦截返回事件,但您尚未迁移到预测性返回,请更新应用以使用受支持的返回导航 API,或者通过在应用的 AndroidManifest.xml 文件的 <application><activity> 标记中将 android:enableOnBackInvokedCallback 属性设置为 false 来暂时选择停用。

“返回主页”预测性返回动画。
预测性跨 activity 动画。
预测性跨任务动画。

APIs de fuentes elegantes obsoletas e inhabilitadas

以 Android 15(API 级别 35)为目标平台的应用默认将 elegantTextHeight TextView 属性设置为 true,从而将紧凑型字体替换为可读性更高的字体。您可以通过将 elegantTextHeight 属性设置为 false 来替换此设置。

Android 16 弃用了 elegantTextHeight 属性,当您的应用以 Android 16 为目标平台后,系统会忽略该属性。由这些 API 控制的“界面字体”即将停用,因此您应调整所有布局,以确保阿拉伯语、老挝语、缅甸语、泰米尔语、古吉拉特语、卡纳达语、马拉雅拉姆语、奥里亚语、泰卢固语或泰语文本的呈现效果一致且不受未来变化的影响。

针对以 Android 14(API 级别 34)及更低版本为目标平台的应用,或针对以 Android 15(API 级别 35)为目标平台且通过将 elegantTextHeight 属性设置为 false 替换默认值的应用,
elegantTextHeight 行为。
以 Android 16(API 级别 36)为目标平台的应用,或以 Android 15(API 级别 35)为目标平台但未通过将 elegantTextHeight 属性设置为 false 来替换默认值的应用,其
elegantTextHeight 行为。

Funcionalidad principal

Android 16 (nivel de API 36) incluye los siguientes cambios que modifican o expanden varias capacidades principales del sistema Android.

Optimización de la programación de trabajo de tasa fija

Antes de orientarse a Android 16, cuando scheduleAtFixedRate omitía la ejecución de una tarea debido a que estaba fuera de un ciclo de vida del proceso válido, todas las ejecuciones omitidas se ejecutaban de inmediato cuando la app regresaba a un ciclo de vida válido.

Cuando se orienta a Android 16, se ejecuta de inmediato una ejecución perdida de scheduleAtFixedRate cuando la app vuelve a un ciclo de vida válido. Se espera que este cambio de comportamiento mejore el rendimiento de la app. Prueba este comportamiento en tu app para verificar si se ve afectada. También puedes realizar pruebas con el marco de compatibilidad de apps y habilitar la marca de compatibilidad STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS.

Factores de forma del dispositivo

Android 16 (nivel de API 36) incluye los siguientes cambios para las apps cuando se muestran en dispositivos de pantalla grande.

Diseños adaptables

Ahora que las apps para Android se ejecutan en una variedad de dispositivos (como teléfonos, tablets, plegables, computadoras de escritorio, automóviles y TVs) y modos de ventanas en pantallas grandes (como pantalla dividida y modo de ventanas de escritorio), los desarrolladores deben crear apps para Android que se adapten a cualquier tamaño de pantalla y ventana, independientemente de la orientación del dispositivo. Los paradigmas como la restricción de la orientación y el cambio de tamaño son demasiado restrictivos en el mundo actual de múltiples dispositivos.

Ignora las restricciones de orientación, cambio de tamaño y relación de aspecto

En el caso de las apps que se segmentan para Android 16 (nivel de API 36), las restricciones de orientación, cambio de tamaño y relación de aspecto ya no se aplican en pantallas con un ancho más pequeño >= 600 dp. Las apps ocupan toda la ventana de visualización, independientemente de la relación de aspecto o la orientación preferida del usuario, y no se usa el formato pillarbox.

Este cambio introduce un nuevo comportamiento estándar de la plataforma. Android se está moviendo hacia un modelo en el que se espera que las apps se adapten a varias orientaciones, tamaños de pantalla y relaciones de aspecto. Las restricciones, como la orientación fija o la capacidad de cambio de tamaño limitada, dificultan la adaptabilidad de la app. Haz que tu app sea adaptable para brindar la mejor experiencia del usuario posible.

También puedes probar este comportamiento con el marco de compatibilidad de apps y habilitar la marca de compatibilidad UNIVERSAL_RESIZABLE_BY_DEFAULT.

Cambios rotundos comunes

Ignorar las restricciones de orientación, cambio de tamaño y relación de aspecto podría afectar la IU de tu app en algunos dispositivos, en especial los elementos diseñados para diseños pequeños bloqueados en orientación vertical, por ejemplo, problemas como diseños estirados y animaciones y componentes fuera de la pantalla. Cualquier suposición sobre la relación de aspecto o la orientación puede causar problemas visuales en tu app. Obtén más información para evitarlos y mejorar el comportamiento adaptable de tu app.

Permitir la rotación del dispositivo genera más recreaciones de actividades, lo que puede provocar la pérdida del estado del usuario si no se conserva correctamente. Obtén información para guardar correctamente el estado de la IU en Cómo guardar estados de la IU.

Detalles de la implementación

Los siguientes atributos del manifiesto y APIs de tiempo de ejecución se ignoran en los dispositivos de pantalla grande en los modos de pantalla completa y multiventana:

Se ignoran los siguientes valores de screenOrientation, setRequestedOrientation() y getRequestedOrientation():

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

En cuanto al cambio de tamaño de la pantalla, android:resizeableActivity="false", android:minAspectRatio y android:maxAspectRatio no tienen efecto.

En el caso de las apps que se segmentan para Android 16 (nivel de API 36), las restricciones de orientación, cambio de tamaño y relación de aspecto de la app se ignoran de forma predeterminada en pantallas grandes, pero todas las apps que no estén completamente listas pueden anular temporalmente este comportamiento inhabilitando la opción (lo que genera el comportamiento anterior de colocarse en modo de compatibilidad).

Excepciones

Las restricciones de orientación, cambio de tamaño y relación de aspecto de Android 16 no se aplican en las siguientes situaciones:

  • Juegos (según la marca android:appCategory)
  • Usuarios que habilitan explícitamente el comportamiento predeterminado de la app en la configuración de relación de aspecto del dispositivo
  • Pantallas más pequeñas que sw600dp

Inhabilitar temporalmente

Para inhabilitar una actividad específica, declara la propiedad del manifiesto PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY:

<activity ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
  ...
</activity>

Si demasiadas partes de tu app no están listas para Android 16, puedes inhabilitar la opción por completo aplicando la misma propiedad a nivel de la aplicación:

<application ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>

Salud y fitness

Android 16 (nivel de API 36) incluye los siguientes cambios relacionados con los datos de actividad física.

Permisos de salud y fitness

对于以 Android 16(API 级别 36)或更高版本为目标平台的应用, BODY_SENSORS 权限使用更精细的权限 under android.permissions.health,which Health Connect also uses。从 Android 16 开始,凡是以前需要具有 BODY_SENSORSBODY_SENSORS_BACKGROUND 权限的 API,现在都需要获取相应的 android.permissions.health 权限。这会影响以下数据类型、API 和前台服务类型:

如果您的应用使用这些 API,则应请求相应的精细权限:

这些权限与保护对 Health Connect(用于存储健康、 健身和保健数据的 Android 数据存储区)中数据的读取访问权限的权限相同。

移动应用

迁移为使用 READ_HEART_RATE 和其他精细权限的移动应用还必须 声明一项 activity 以显示应用的隐私权政策。这与健康数据共享的要求相同。

Conectividad

Android 16 (nivel de API 36) incluye los siguientes cambios en la pila de Bluetooth para mejorar la conectividad con dispositivos periféricos.

Nuevos intents para controlar la pérdida de vinculación y los cambios de encriptación

As part of the Improved bond loss handling, Android 16 also introduces 2 new intents to provide apps with greater awareness of bond loss and encryption changes.

Apps targeting Android 16 can now:

  • Receive an ACTION_KEY_MISSING intent when remote bond loss is detected, allowing them to provide more informative user feedback and take appropriate actions.
  • Receive an ACTION_ENCRYPTION_CHANGE intent whenever encryption status of the link changes. This includes encryption status change, encryption algorithm change, and encryption key size change. Apps must consider the bond restored if the link is successfully encrypted upon receiving ACTION_ENCRYPTION_CHANGE intent later.

Adapting to varying OEM implementations

While Android 16 introduces these new intents, their implementation and broadcasting can vary across different device manufacturers (OEMs). To ensure your app provides a consistent and reliable experience across all devices, developers should design their bond loss handling to gracefully adapt to these potential variations.

We recommend the following app behaviors:

  • If the ACTION_KEY_MISSING intent is broadcast:

    The ACL (Asynchronous Connection-Less) link will be disconnected by the system, but the bond information for the device will be retained (as described here).

    Your app should use this intent as the primary signal for bond loss detection and guiding the user to confirm the remote device is in range before initiating device forgetting or re-pairing.

    If a device disconnects after ACTION_KEY_MISSING is received, your app should be cautious about reconnecting, as the device may no longer be bonded with the system.

  • If the ACTION_KEY_MISSING intent is NOT broadcast:

    The ACL link will remain connected, and the bond information for the device will be removed by the system, same to behavior in Android 15.

    In this scenario, your app should continue its existing bond loss handling mechanisms as in previous Android releases, to detect and manage bond loss events.

Nueva forma de quitar la vinculación de Bluetooth

All apps targeting Android 16 are now able to unpair bluetooth devices using a public API in CompanionDeviceManager. If a companion device is being managed as a CDM association, then the app can trigger bluetooth bond removal by using the new removeBond(int) API on the associated device. The app can monitor the bond state changes by listening to the bluetooth device broadcast event ACTION_BOND_STATE_CHANGED.

Seguridad

Android 16 (nivel de API 36) incluye los siguientes cambios de seguridad.

Bloqueo de la versión de MediaStore

En el caso de las apps orientadas a Android 16 o versiones posteriores, MediaStore#getVersion() ahora será único para cada app. Esto elimina las propiedades de identificación de la cadena de versión para evitar el abuso y el uso de técnicas de creación de huellas digitales. Las apps no deben hacer suposiciones sobre el formato de esta versión. Las apps ya deberían controlar los cambios de versión cuando usan esta API y, en la mayoría de los casos, no deberían necesitar cambiar su comportamiento actual, a menos que el desarrollador haya intentado inferir información adicional que esté más allá del alcance previsto de esta API.

Intents más seguros

La función Safer Intents es una iniciativa de seguridad de varias fases diseñada para mejorar la seguridad del mecanismo de resolución de intents de Android. El objetivo es proteger las apps de acciones maliciosas agregando verificaciones durante el procesamiento de intents y filtrando los intents que no cumplen con criterios específicos.

En Android 15, la función se enfocó en la app de envío. Ahora, con Android 16, el control se traslada a la app de recepción, lo que permite que los desarrolladores habiliten la resolución estricta de intents con el manifiesto de su app.

Se implementarán dos cambios clave:

  1. Los intents explícitos deben coincidir con el filtro de intents del componente de destino: Si un intent segmenta explícitamente un componente, debe coincidir con el filtro de intents de ese componente.

  2. Los intents sin una acción no pueden coincidir con ningún filtro de intents: Los intents que no tienen una acción especificada no deben resolverse en ningún filtro de intents.

Estos cambios solo se aplican cuando hay varias apps involucradas y no afectan el control de intents dentro de una sola app.

Impacto

La naturaleza de la habilitación significa que los desarrolladores deben habilitarla explícitamente en el manifiesto de su app para que surta efecto. Como resultado, el impacto de la función se limitará a las apps cuyos desarrolladores cumplan con los siguientes requisitos:

  • Conocer la función Safer Intents y sus beneficios
  • Eligen de forma activa incorporar prácticas más estrictas de control de intents en sus apps.

Este enfoque de habilitación minimiza el riesgo de interrumpir apps existentes que pueden depender del comportamiento actual de resolución de intents menos seguro.

Si bien el impacto inicial en Android 16 puede ser limitado, la iniciativa Safer Intents tiene una hoja de ruta para lograr un impacto más amplio en futuras versiones de Android. El plan es que, con el tiempo, la resolución estricta de la intención sea el comportamiento predeterminado.

La función Safer Intents tiene el potencial de mejorar significativamente la seguridad del ecosistema de Android, ya que dificulta que las apps maliciosas exploten vulnerabilidades en el mecanismo de resolución de intents.

Sin embargo, la transición a la exclusión voluntaria y la aplicación obligatoria deben administrarse con cuidado para abordar posibles problemas de compatibilidad con las apps existentes.

Implementación

Los desarrolladores deben habilitar explícitamente la coincidencia de intents más estricta con el atributo intentMatchingFlags en el manifiesto de su app. Este es un ejemplo en el que la función es opcional para toda la app, pero está inhabilitada o rechazada en un receptor:

<application android:intentMatchingFlags="enforceIntentFilter">
    <receiver android:name=".MyBroadcastReceiver" android:exported="true" android:intentMatchingFlags="none">
        <intent-filter>
            <action android:name="com.example.MY_CUSTOM_ACTION" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.example.MY_ANOTHER_CUSTOM_ACTION" />
        </intent-filter>
    </receiver>
</application>

Más información sobre las marcas compatibles:

Nombre de la marca Descripción
enforceIntentFilter Aplica una coincidencia más estricta para los intents entrantes
ninguno Inhabilita todas las reglas especiales de coincidencia para las intents entrantes. Cuando se especifican varias marcas, los valores en conflicto se resuelven dando prioridad a la marca "none".
allowNullAction Relaja las reglas de coincidencia para permitir que coincidan las intents sin una acción. Esta marca se debe usar junto con "enforceIntentFilter" para lograr un comportamiento específico.

Pruebas y depuración

Cuando la aplicación de la política esté activa, las apps deberían funcionar correctamente si el llamador del intent completó el intent de forma adecuada. Sin embargo, las intents bloqueadas activarán mensajes de registro de advertencia, como "Intent does not match component's intent filter:" y "Access blocked:", con la etiqueta "PackageManager.". Esto indica un posible problema que podría afectar la app y requiere atención.

Filtro de Logcat:

tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")

Filtrado de llamadas al sistema de GPU

Para proteger la superficie de la GPU Mali, se bloquearon en las compilaciones de producción las IOCTL de la GPU Mali que se dejaron de usar o que están destinadas únicamente al desarrollo de la GPU. Además, las IOCTL que se usan para la generación de perfiles de la GPU se restringieron al proceso de shell o a las aplicaciones depurables. Consulta la actualización de SAC para obtener más detalles sobre la política a nivel de la plataforma.

Este cambio se realiza en dispositivos Pixel que usan la GPU Mali (Pixel 6-9). Arm proporcionó la categorización oficial de sus IOCTL en Documentation/ioctl-categories.rst de su versión r54p2. Esta lista se seguirá manteniendo en futuras versiones del controlador.

Este cambio no afecta a las APIs de gráficos compatibles (incluidas Vulkan y OpenGL) y no se espera que afecte a los desarrolladores ni a las aplicaciones existentes. Las herramientas de generación de perfiles de GPU, como Streamline Performance Analyzer y el Inspector de GPU para Android, no se verán afectadas.

Prueba

Si ves una denegación de SELinux similar a la siguiente, es probable que este cambio haya afectado a tu aplicación:

06-30 10:47:18.617 20360 20360 W roidJUnitRunner: type=1400 audit(0.0:85): avc:  denied  { ioctl }
for  path="/dev/mali0" dev="tmpfs" ino=1188 ioctlcmd=0x8023
scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:gpu_device:s0 tclass=chr_file
permissive=0 app=com.google.android.selinux.pts

Si tu aplicación necesita usar IOCTL bloqueadas, informa un error y asígnalo a android-partner-security@google.com.

Preguntas frecuentes

  1. ¿Este cambio de política se aplica a todos los OEMs? Este cambio será opcional, pero estará disponible para cualquier OEM que desee usar este método de endurecimiento. Puedes encontrar instrucciones para implementar el cambio en la documentación de implementación.

  2. ¿Es obligatorio realizar cambios en la base de código del OEM para implementar esto, o viene con una nueva versión de AOSP de forma predeterminada? El cambio a nivel de la plataforma vendrá con una nueva versión de AOSP de forma predeterminada. Los proveedores pueden habilitar este cambio en su base de código si desean aplicarlo.

  3. ¿Son los SoCs responsables de mantener actualizada la lista de IOCTL? Por ejemplo, si mi dispositivo usa una GPU Mali de ARM, ¿debería comunicarme con ARM para realizar alguno de los cambios? Los SoCs individuales deben actualizar sus listas de IOCTL por dispositivo cuando se lance el controlador. Por ejemplo, ARM actualizará su lista de IOCTL publicada cuando se actualicen los controladores. Sin embargo, los OEMs deben asegurarse de incorporar las actualizaciones en su SEPolicy y agregar las IOCTL personalizadas seleccionadas a las listas según sea necesario.

  4. ¿Este cambio se aplica automáticamente a todos los dispositivos Pixel disponibles en el mercado, o se requiere una acción del usuario para activar algo y aplicar este cambio? Este cambio se aplica a todos los dispositivos Pixel disponibles en el mercado que usan la GPU Mali (Pixel 6-9). No se requiere ninguna acción del usuario para aplicar este cambio.

  5. ¿El uso de esta política afectará el rendimiento del controlador del kernel? Esta política se probó en la GPU Mali con GFXBench y no se observó ningún cambio medible en el rendimiento de la GPU.

  6. ¿Es necesario que la lista de IOCTL se alinee con las versiones actuales del espacio de usuario y del controlador del kernel? Sí, la lista de IOCTL permitidas debe sincronizarse con las IOCTL compatibles con el espacio de usuario y los controladores del kernel. Si se actualizan las IOCTL en el espacio de usuario o el controlador del kernel, se debe actualizar la lista de IOCTL de SEPolicy para que coincida.

  7. ARM categorizó las IOCTL como "restringidas" o "instrumentación", pero queremos usar algunas de ellas en casos de uso de producción o denegar otras. Los OEMs o SoCs individuales son responsables de decidir cómo categorizar las IOCTL que usan, según la configuración de sus bibliotecas Mali del espacio de usuario. La lista de ARM se puede usar para ayudar a decidir sobre estas, pero el caso de uso de cada OEM o SoC puede ser diferente.

Privacidad

Android 16 (nivel de API 36) incluye los siguientes cambios de privacidad.

Permiso de red local

具有 INTERNET 权限的任何应用都可以访问局域网中的设备。 这使得应用可以轻松连接到本地设备,但也存在隐私方面的影响,例如形成用户指纹,以及成为位置信息的代理。

本地网络保护项目旨在通过在新的运行时权限后限制对本地网络的访问,来保护用户的隐私。

发布计划

这项变更将分别在 25Q2 和 26Q2 这两个版本之间部署。 开发者必须遵循 25Q2 的相关指南并分享反馈,因为这些保护措施将在后续 Android 版本中强制执行。此外,他们还需要按照以下指南更新依赖于隐式本地网络访问权限的场景,并为用户拒绝和撤消新权限做好准备。

影响

在当前阶段,LNP 是一项选择启用功能,这意味着只有选择启用的应用会受到影响。选择启用阶段的目标是让应用开发者了解应用的哪些部分依赖于隐式本地网络访问权限,以便他们为下一个版本做好权限保护准备。

如果应用使用以下方式访问用户的本地网络,则会受到影响:

  • 直接或通过库使用本地网络地址(例如 mDNS 或 SSDP 服务发现协议)上的原始套接字
  • 使用可访问本地网络的框架级类(例如 NsdManager)

本地网络地址发送流量和本地网络地址接收流量需要本地网络访问权限。下表列出了一些常见情况:

应用低级层网络操作 需要本地网络权限
建立出站 TCP 连接
接受传入的 TCP 连接
发送 UDP 单播、多播、广播
接收传入的 UDP 单播、多播、广播

这些限制是在网络堆栈深处实现的,因此适用于所有网络 API。这包括在原生代码或受管理代码中创建的套接字、Cronet 和 OkHttp 等网络库,以及基于这些库实现的任何 API。尝试解析本地网络上的服务(即带有 .local 后缀的服务)将需要本地网络权限。

上述规则的例外情况:

  • 如果设备的 DNS 服务器位于本地网络上,则进出该服务器(位于端口 53)的流量不需要本地网络访问权限。
  • 使用输出切换器作为其应用内选择器的应用将不需要本地网络权限(更多指南将在 2025 年第 4 季度发布)。

开发者指南(选择启用)

如需选择启用本地网络限制,请执行以下操作:

  1. 将设备刷写到 25Q2 Beta 3 或更高版本的 build。
  2. 安装要测试的应用。
  3. 在 adb 中切换 Appcompat 标志:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. 重启设备

现在,您的应用对本地网络的访问受到限制,任何访问本地网络的尝试都会导致套接字错误。如果您使用的 API 在应用进程之外执行本地网络操作(例如:NsdManager),在选择启用阶段,这些 API 不会受到影响。

如需恢复访问权限,您必须向应用授予 NEARBY_WIFI_DEVICES 权限。

  1. 确保应用在其清单中声明了 NEARBY_WIFI_DEVICES 权限。
  2. 依次前往设置 > 应用 > [应用名称] > 权限 > 附近的设备 > 允许

现在,应用对本地网络的访问权限应该已恢复,并且所有场景都应像选择启用应用之前一样正常运行。

本地网络保护功能开始强制执行后,应用的网络流量将受到以下影响。

权限 出站 LAN 请求 出站/入站互联网请求 入站 LAN 请求
已授予 Works Works Works
未授予 最差排行榜 Works 最差排行榜

使用以下命令关闭应用兼容性标志

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

错误

每当调用套接字调用 send 或 send 变体向本地网络地址发送数据时,系统都会向该套接字返回因这些限制而产生的错误。

错误示例:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

本地网络定义

此项目中的本地网络是指使用支持广播的网络接口(例如 Wi-Fi 或以太网)的 IP 网络,但不包括移动网络 (WWAN) 或 VPN 连接。

以下网络被视为本地网络:

IPv4

  • 169.254.0.0/16 // 链路本地
  • 100.64.0.0/10 // CGNAT
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6

  • 链路本地
  • 直接连接的路线
  • Thread 等桩网络
  • 多子网(待定)

此外,多播地址 (224.0.0.0/4、ff00::/8) 和 IPv4 广播地址 (255.255.255.255) 也被归类为本地网络地址。

Fotos propiedad de la app

当面向 SDK 36 或更高版本的应用在搭载 Android 16 或更高版本的设备上提示用户授予照片和视频权限时,如果用户选择限制对所选媒体的访问权限,则会在照片选择器中看到该应用拥有的所有照片。用户可以取消选择任何这些预选项,这会撤消该应用对这些照片和视频的访问权限。