كما هو الحال في الإصدارات السابقة، يتضمّن Android 16 تغييرات في السلوك قد تؤثّر في تطبيقك. تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف الإصدار 16 من نظام التشغيل Android أو الإصدارات الأحدث. إذا كان تطبيقك يستهدف الإصدار 16 من نظام التشغيل Android أو الإصدارات الأحدث، عليك تعديل تطبيقك ليتوافق مع هذه السلوكيات، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر في جميع التطبيقات
التي تعمل على Android 16 بغض النظر عن targetSdkVersion
لتطبيقك.
تجربة المستخدم وواجهة مستخدم النظام
يتضمّن نظام التشغيل Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية التي تهدف إلى توفير تجربة مستخدم أكثر اتساقًا وسهولة.
إيقاف مشاركة البيانات الشخصية في وضع "العرض حتى حافة الشاشة"
Android 15 强制执行全屏显示,以针对 Android 15(API 级别 35)的应用为目标平台,但您的应用可以通过将 R.attr#windowOptOutEdgeToEdgeEnforcement
设置为 true
来选择停用。对于以 Android 16(API 级别 36)为目标平台的应用,R.attr#windowOptOutEdgeToEdgeEnforcement
已被废弃并停用,并且您的应用无法选择不采用从边缘到边缘的布局。
- 如果您的应用以 Android 16(API 级别 36)为目标平台,并且在 Android 15 设备上运行,则
R.attr#windowOptOutEdgeToEdgeEnforcement
会继续正常运行。 - 如果您的应用以 Android 16(API 级别 36)为目标平台,并且在 Android 16 设备上运行,则
R.attr#windowOptOutEdgeToEdgeEnforcement
会被停用。
如需在 Android 16 中进行测试,请确保您的应用支持无边框设计,并移除所有 R.attr#windowOptOutEdgeToEdgeEnforcement
用法,以便您的应用在 Android 15 设备上也能支持无边框设计。如需支持从边缘到边缘的显示,请参阅 Compose 和 View 指南。
يجب نقل البيانات أو إيقاف ميزة "الرجوع التنبؤي"
对于以 Android 16(API 级别 36)或更高版本为目标平台且在搭载 Android 16 或更高版本的设备上运行的应用,预测性返回系统动画(返回主屏幕、跨任务和跨 activity)默认处于启用状态。此外,系统不再调用 onBackPressed
,也不再调度 KeyEvent.KEYCODE_BACK
。
如果您的应用会拦截返回事件,但您尚未迁移到预测性返回,请更新应用以使用受支持的返回导航 API,或者暂时选择停用,方法是在应用的 AndroidManifest.xml
文件的 <application>
或 <activity>
标记中将 android:enableOnBackInvokedCallback
属性设置为 false
。
إيقاف واجهات برمجة التطبيقات الخاصة بالخطوط الأنيقة نهائيًا
في التطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android (المستوى 35 لواجهة برمجة التطبيقات)، يتم ضبط السمة
elegantTextHeight
TextView
على القيمة true
تلقائيًا، ما يؤدي إلى استبدال الخط المضغوط بخط أكثر قابلية للقراءة. يمكنك إلغاء هذا الإعداد من خلال ضبط السمة elegantTextHeight
على false
.
في الإصدار 16 من نظام التشغيل Android، سيتم إيقاف السمة
elegantTextHeight
،
وسيتم تجاهل السمة عندما يستهدف تطبيقك الإصدار 16 من نظام التشغيل Android. سيتم إيقاف "خطوط واجهة المستخدم" التي تتحكّم فيها واجهات برمجة التطبيقات هذه، لذا عليك تعديل أي تخطيطات لضمان عرض النص بشكل متسق ومناسب للمستقبل باللغات العربية أو اللاوية أو البورمية أو التاميلية أو الغوجاراتية أو الكنادية أو المالايالامية أو الأودية أو التيلوغوية أو التايلاندية.

elegantTextHeight
للتطبيقات التي تستهدف الإصدار 14 من نظام التشغيل Android (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأقدم، أو للتطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android (المستوى 35 لواجهة برمجة التطبيقات) والتي تم فيها تجاهل الإعداد التلقائي من خلال ضبط السمة elegantTextHeight
على false
.
elegantTextHeight
للتطبيقات التي تستهدف الإصدار 16 من نظام التشغيل Android (المستوى 36 لواجهة برمجة التطبيقات)، أو للتطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android (المستوى 35 لواجهة برمجة التطبيقات) والتي لم
تتجاوز الإعداد التلقائي من خلال ضبط السمة elegantTextHeight
على false
.الوظيفة الأساسية
يتضمّن نظام التشغيل Android 16 (المستوى 36 لواجهة برمجة التطبيقات) التغييرات التالية التي تعدّل أو توسّع العديد من الإمكانات الأساسية لنظام Android.
تحسين جدولة العمل بمعدّل ثابت
Prior to targeting Android 16, when scheduleAtFixedRate
missed a task execution due to being outside a valid
process lifecycle, all missed executions immediately
execute when the app returns to a valid lifecycle.
When targeting Android 16, at most one missed execution of
scheduleAtFixedRate
is immediately executed when the app
returns to a valid lifecycle. This behavior change is expected to improve app
performance. Test this behavior in your app to check if your app is impacted.
You can also test by using the app compatibility framework
and enabling the STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS
compat flag.
أشكال الأجهزة
يتضمّن نظام التشغيل Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية للتطبيقات عند عرضها على الأجهزة ذات الشاشات الكبيرة.
التنسيقات التكيّفية
现在,Android 应用可在各种设备(例如手机、平板电脑、可折叠设备、桌面设备、汽车和电视)上运行,并且在大屏设备上支持多种窗口模式(例如分屏和桌面窗口),因此开发者应构建能够适应任何屏幕和窗口尺寸的 Android 应用,无论设备方向如何。在当今多设备的世界中,限制屏幕方向和尺寸可调整性等范式过于严格。
忽略屏幕方向、尺寸可调整性和宽高比限制
对于以 Android 16(API 级别 36)为目标平台的应用,Android 16 包含对系统管理屏幕方向、尺寸调整能力和宽高比限制的方式的变更。在最小宽度大于或等于 600dp 的显示屏上,这些限制不再适用。应用还会填满整个显示窗口,无论宽高比或用户偏好的屏幕方向如何,都不会使用竖条模式。
此变更引入了新的标准平台行为。Android 正在向一种模型转变,在该模型中,应用需要适应各种屏幕方向、显示大小和宽高比。固定屏幕方向或有限的尺寸可调整性等限制会阻碍应用的适应性,因此我们建议让应用具备自适应能力,以提供尽可能出色的用户体验。
您还可以使用应用兼容性框架并启用 UNIVERSAL_RESIZABLE_BY_DEFAULT
兼容性标志来测试此行为。
常见的重大更改
忽略屏幕方向、可调整大小性和宽高比限制可能会影响应用在某些设备上的界面,尤其是那些专为锁定为纵向的小布局设计的元素,例如布局拉伸、动画和组件超出屏幕等问题。任何关于宽高比或屏幕方向的假设都可能导致应用出现视觉问题。详细了解如何避免这些问题并改进应用的自适应行为。
允许设备旋转会导致更多 activity 重新创建,如果未正确保留,可能会导致用户状态丢失。如需了解如何正确保存界面状态,请参阅保存界面状态。
实现细节
在全屏模式和多窗口模式下,以下清单属性和运行时 API 会被大屏设备忽略:
screenOrientation
resizableActivity
minAspectRatio
maxAspectRatio
setRequestedOrientation()
getRequestedOrientation()
系统会忽略 screenOrientation
、setRequestedOrientation()
和 getRequestedOrientation()
的以下值:
portrait
reversePortrait
sensorPortrait
userPortrait
landscape
reverseLandscape
sensorLandscape
userLandscape
对于显示屏可调整大小性,android:resizeableActivity="false"
、android:minAspectRatio
和 android:maxAspectRatio
没有影响。
对于以 Android 16(API 级别 36)为目标平台的应用,默认情况下,大屏设备会忽略应用屏幕方向、可调整尺寸性和宽高比限制,但尚未完全准备就绪的每个应用都可以选择停用此行为,从而暂时替换此行为(这会导致应用采用之前的行为,即放置在兼容模式下)。
异常
在以下情况下,Android 16 的屏幕方向、尺寸调整能力和宽高比限制不适用:
- 游戏(基于
android:appCategory
标志) - 用户在设备的宽高比设置中明确选择启用应用的默认行为
- 小于
sw600dp
的屏幕
暂时停用
如需选择停用特定 activity,请声明 PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY
清单属性:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
如果您的应用有太多部分尚未准备好支持 Android 16,您可以在应用级别应用相同的属性,从而完全选择不启用该功能:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
الصحة واللياقة البدنية
يتضمّن نظام التشغيل Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية المتعلّقة ببيانات الصحة واللياقة البدنية.
أذونات الصحة واللياقة البدنية
بالنسبة إلى التطبيقات التي تستهدف الإصدار Android 16 (المستوى 36 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، تستخدم أذونات BODY_SENSORS
أذونات أكثر دقة ضمن android.permissions.health
، والتي يستخدمها أيضًا Health Connect. اعتبارًا من الإصدار 16 من نظام التشغيل Android، أي واجهة برمجة تطبيقات كانت تتطلّب في السابق BODY_SENSORS
أو BODY_SENSORS_BACKGROUND
أصبحت الآن تتطلّب الإذن المقابل android.permissions.health
بدلاً من ذلك. ويؤثّر ذلك في أنواع البيانات وواجهات برمجة التطبيقات وأنواع الخدمات التي تعمل في المقدّمة التالية:
HEART_RATE_BPM
من "خدمات الصحة" على Wear OS-
Sensor.TYPE_HEART_RATE
من "مدير أجهزة الاستشعار في Android" heartRateAccuracy
وheartRateBpm
منProtoLayout
على Wear OSFOREGROUND_SERVICE_TYPE_HEALTH
حيث يجب منح الإذنandroid.permission.health
بدلاً منBODY_SENSORS
إذا كان تطبيقك يستخدم واجهات برمجة التطبيقات هذه، يجب أن يطلب الأذونات الدقيقة ذات الصلة:
- للمراقبة أثناء الاستخدام لمعدّل نبضات القلب أو نسبة الأكسجين بالدم أو درجة حرارة الجلد، اطلب الإذن الدقيق بموجب
android.permissions.health
، مثلREAD_HEART_RATE
بدلاً منBODY_SENSORS
. - للوصول إلى أجهزة الاستشعار في الخلفية، استخدِم
READ_HEALTH_DATA_IN_BACKGROUND
بدلاً منBODY_SENSORS_BACKGROUND
.
وهذه الأذونات هي نفسها التي تحمي إمكانية الوصول إلى بيانات القراءة من Health Connect، وهو مستودع بيانات Android الخاص ببيانات الصحة واللياقة البدنية والعافية.
التطبيقات المتوافقة مع الأجهزة الجوّالة
يجب أيضًا أن توضّح التطبيقات التي تنقل بياناتها لاستخدام إذن READ_HEART_RATE
وأذونات أخرى دقيقة سياسة الخصوصية الخاصة بها. هذا هو الشرط نفسه الذي ينطبق على Health Connect.
إمكانية الاتصال
يتضمّن نظام التشغيل Android 16 (المستوى 36 لواجهة برمجة التطبيقات) التغييرات التالية في حزمة بروتوكول البلوتوث لتحسين الاتصال بالأجهزة الطرفية.
أهداف جديدة للتعامل مع فقدان الربط والتغييرات في التشفير
作为改进了对键值对丢失的处理的一部分,Android 16 还引入了 2 个新 intent,以便应用更好地了解键值对丢失和加密更改。
以 Android 16 为目标平台的应用现在可以:
- 在检测到远程键盘连接丢失时接收
ACTION_KEY_MISSING
intent,以便提供更具信息量的用户反馈并采取适当的措施。 - 每当链接的加密状态发生变化时,都会收到
ACTION_ENCRYPTION_CHANGE
intent。这包括加密状态更改、加密算法更改和加密密钥大小更改。如果应用在稍后收到ACTION_ENCRYPTION_CHANGE
intent 时成功加密了链接,则必须将该绑定视为已恢复。
适应不同的 OEM 实现
虽然 Android 16 引入了这些新 intent,但其实现和广播可能会因不同的设备制造商 (OEM) 而异。为了确保您的应用在所有设备上都能提供一致且可靠的体验,开发者应设计其绑定丢失处理机制,以妥善适应这些潜在的变化。
我们建议您采用以下应用行为:
如果广播
ACTION_KEY_MISSING
intent:系统会断开 ACL(异步无连接)链接,但会保留设备的配对信息(如此处所述)。
您的应用应将此 intent 用作检测配对丢失的主要信号,并在发起设备忘记或重新配对之前引导用户确认远程设备是否在范围内。
如果设备在收到
ACTION_KEY_MISSING
后断开连接,您的应用应谨慎重新连接,因为设备可能已不再与系统绑定。如果未广播
ACTION_KEY_MISSING
intent:ACL 链接将保持连接状态,系统会移除设备的配对信息,与 Android 15 中的行为相同。
在这种情况下,您的应用应继续使用与之前的 Android 版本相同的现有配对丢失处理机制,以检测和管理配对丢失事件。
طريقة جديدة لإزالة ربط البلوتوث
现在,以 Android 16 为目标平台的所有应用都可以使用 CompanionDeviceManager
中的公共 API 解除蓝牙设备配对。如果配套设备作为 CDM 关联进行管理,则应用可以在关联的设备上使用新的 removeBond(int)
API 触发蓝牙配对的移除。该应用可以通过监听蓝牙设备广播事件 ACTION_BOND_STATE_CHANGED
来监控配对状态变化。
الأمان
يتضمّن نظام التشغيل Android 16 (المستوى 36 لواجهة برمجة التطبيقات) تغييرات الأمان التالية.
قفل إصدار MediaStore
对于以 Android 16 或更高版本为目标平台的应用,MediaStore#getVersion()
现在将是每个应用的唯一标识。这会从版本字符串中移除标识属性,以防止滥用和用于指纹识别技术。应用不应对此版本的格式做出任何假设。在使用此 API 时,应用应已处理版本变更,并且在大多数情况下无需更改其当前行为,除非开发者尝试推断超出此 API 预期范围的其他信息。
Safer Intents
“更安全的 intent”功能是一项多阶段安全计划,旨在提升 Android 的 intent 解析机制的安全性。目标是在 intent 处理期间添加检查,并过滤不符合特定条件的 intent,从而保护应用免受恶意操作的侵害。
在 Android 15 中,该功能侧重于发送应用,现在在 Android 16 中,控制权转移到了接收应用,允许开发者使用其应用清单选择启用严格的 intent 解析。
我们正在实施两项关键变更:
显式 intent 必须与目标组件的 intent 过滤器相匹配:如果 intent 显式定位到某个组件,则应与该组件的 intent 过滤器相匹配。
没有操作的 intent 无法匹配任何 intent 过滤器:未指定操作的 intent 不应解析为任何 intent 过滤器。
这些变更仅在涉及多个应用时适用,不会影响单个应用内的 intent 处理。
影响
选择启用性质意味着,开发者必须在应用清单中明确启用它,才能使其生效。 因此,此功能的影响将仅限于以下应用(开发者):
- 了解“更安全的 intent”功能及其优势。
- 主动选择在应用中采用更严格的 intent 处理实践。
这种选择性采用的方法可最大限度地降低破坏可能依赖于当前不太安全的 intent 解析行为的现有应用的风险。
虽然在 Android 16 中,初始影响可能有限,但“更安全的 intent”计划的路线图显示,未来 Android 版本中会产生更广泛的影响。我们计划最终将严格的 intent 解析设为默认行为。
“更安全的 intent”功能可让恶意应用更难利用 intent 解析机制中的漏洞,从而显著提升 Android 生态系统的安全性。
不过,向选择退出和强制执行的过渡必须谨慎管理,以解决现有应用的潜在兼容性问题。
实现
开发者需要在应用清单中使用 intentMatchingFlags
属性明确启用更严格的 intent 匹配。
以下示例展示了如何为整个应用选择启用该功能,但在接收器上停用/选择停用该功能:
<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>
有关支持的标志的更多信息:
标志名称 | 说明 |
---|---|
enforceIntentFilter | 对传入的 intent 强制执行更严格的匹配 |
none | 停用针对传入 intent 的所有特殊匹配规则。指定多个标志时,系统会优先考虑“无”标志,以解决值冲突问题 |
allowNullAction | 放宽了匹配规则,允许匹配没有操作的 intent。此标志与“enforceIntentFilter”结合使用可实现特定行为 |
测试和调试
在强制执行处于有效状态时,如果 intent 调用方已正确填充 intent,应用应能正常运行。
不过,被屏蔽的 intent 会触发警告日志消息(例如 "Intent does not match component's intent filter:"
和 "Access blocked:"
),并带有标记 "PackageManager."
。这表示存在可能会影响应用的潜在问题,需要引起注意。
Logcat 过滤条件:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
الخصوصية
يتضمّن نظام التشغيل Android 16 (المستوى 36 لواجهة برمجة التطبيقات) تغييرات الخصوصية التالية.
إذن الوصول إلى الشبكة المحلية
يمكن لأي تطبيق لديه إذن INTERNET
الوصول إلى الأجهزة على الشبكة المحلية.
يسهّل ذلك على التطبيقات الاتصال بالأجهزة المحلية، ولكن له أيضًا آثار على الخصوصية، مثل إنشاء بصمة للمستخدم، والعمل كخادم وكيل للموقع الجغرافي.
يهدف مشروع "حماية الشبكة المحلية" إلى حماية خصوصية المستخدم من خلال حصر الوصول إلى الشبكة المحلية بإذن جديد أثناء التشغيل.
خطة الإصدار
سيتم طرح هذا التغيير بين إصدارَين، هما 25Q2 وTBD على التوالي. من الضروري أن يلتزم المطوّرون بهذه الإرشادات في الربع الثاني من عام 2025 وأن يشاركوا ملاحظاتهم، لأنّ هذه الحمايات سيتم فرضها في إصدار Android لاحق. علاوةً على ذلك، سيحتاج المطوّرون إلى تعديل السيناريوهات التي تعتمد على الوصول الضمني إلى الشبكة المحلية باتّباع الإرشادات التالية والاستعداد لرفض المستخدمين وإلغاء الإذن الجديد.
التأثير
في المرحلة الحالية، تكون ميزة "الشبكة المحلية فقط" اختيارية، ما يعني أنّها ستؤثر فقط في التطبيقات التي فعّلتها. والهدف من مرحلة الموافقة هو أن يفهم مطوّرو التطبيقات الأجزاء التي تعتمد على الوصول الضمني إلى الشبكة المحلية، حتى يتمكّنوا من الاستعداد لحماية الأذونات في الإصدار التالي.
ستتأثر التطبيقات إذا كانت تصل إلى الشبكة المحلية للمستخدم باستخدام:
- الاستخدام المباشر أو استخدام المكتبة للمقابس الأولية على عناوين الشبكة المحلية (مثل بروتوكول mDNS أو SSDP لاكتشاف الخدمات)
- استخدام فئات على مستوى إطار العمل يمكنها الوصول إلى الشبكة المحلية (مثل NsdManager)
تتطلّب حركة البيانات من عنوان شبكة محلية وإليه إذن الوصول إلى الشبكة المحلية. يسرد الجدول التالي بعض الحالات الشائعة:
عمليات الشبكة المنخفضة المستوى في التطبيق | يجب منح إذن الوصول إلى الشبكة المحلية |
---|---|
إجراء اتصال TCP صادر | نعم |
قبول اتصالات TCP الواردة | نعم |
إرسال بث أحادي أو بث متعدّد أو بث عادي عبر UDP | نعم |
تلقّي بث أحادي أو متعدد أو عادي وارد عبر UDP | نعم |
يتم تنفيذ هذه القيود في أعماق حزمة الشبكات، وبالتالي تنطبق على جميع واجهات برمجة التطبيقات المتعلقة بالشبكات. ويشمل ذلك المقابس التي تم إنشاؤها في الرموز البرمجية الأصلية أو المُدارة، ومكتبات الشبكات مثل Cronet وOkHttp، وأي واجهات برمجة تطبيقات تم تنفيذها فوق هذه المكتبات. ستتطلّب محاولة حلّ الخدمات على الشبكة المحلية (أي تلك التي تتضمّن اللاحقة .local) إذنًا بالوصول إلى الشبكة المحلية.
استثناءات للقواعد أعلاه:
- إذا كان خادم DNS الخاص بجهاز ما على شبكة محلية، لا يتطلّب نقل البيانات من الجهاز أو إليه (على المنفذ 53) إذن الوصول إلى الشبكة المحلية.
- لن تحتاج التطبيقات التي تستخدم أداة Output Switcher كأداة اختيار داخل التطبيق إلى أذونات الوصول إلى الشبكة المحلية (ستتوفّر المزيد من الإرشادات في الربع الرابع من عام 2025).
إرشادات للمطوّرين (تتطلّب الموافقة)
لإيقاف الوصول إلى الشبكة المحلية، اتّبِع الخطوات التالية:
- تثبيت إصدار يتضمّن الإصدار التجريبي 3 من 25Q2 أو إصدار أحدث على الجهاز
- ثبِّت التطبيق الذي تريد اختباره.
بدِّل علامة Appcompat في adb:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
إعادة تشغيل الجهاز
سيتم الآن تقييد وصول تطبيقك إلى الشبكة المحلية، وسيؤدي أي محاولة للوصول إلى الشبكة المحلية إلى حدوث أخطاء في المقبس. إذا كنت تستخدم واجهات برمجة تطبيقات تنفّذ عمليات على الشبكة المحلية خارج عملية تطبيقك (مثل NsdManager)، لن تتأثّر هذه العمليات خلال مرحلة الموافقة.
لاستعادة إمكانية الوصول، يجب منح تطبيقك الإذن بالوصول إلى NEARBY_WIFI_DEVICES
.
- تأكَّد من أنّ التطبيق يعلن عن إذن
NEARBY_WIFI_DEVICES
في بيان التطبيق. - انتقِل إلى الإعدادات > التطبيقات > [اسم التطبيق] > الأذونات > الأجهزة القريبة > السماح.
من المفترض الآن أن يكون قد تم استعادة إذن وصول تطبيقك إلى الشبكة المحلية، وأن تعمل جميع السيناريوهات كما كانت قبل منح التطبيق الإذن.
بعد بدء فرض حماية الشبكة المحلية، إليك تأثير ذلك في عدد الزيارات الواردة إلى شبكة التطبيق.
الإذن | Outbound LAN Request | طلب الإنترنت الصادر/الوارد | طلب شبكة LAN وارد |
---|---|---|---|
تم منح الأذونات | Works | Works | Works |
لم يتم منح الإذن | الإخفاقات | Works | الإخفاقات |
استخدِم الأمر التالي لإيقاف علامة App-Compat
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
الأخطاء
سيتم إرجاع الأخطاء الناتجة عن هذه القيود إلى مقبس الاتصال الذي تم استدعاؤه عندما يستدعي الأمر send أو أحد متغيراته إلى عنوان شبكة محلية.
أمثلة على الأخطاء:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
تعريف الشبكة المحلية
تشير الشبكة المحلية في هذا المشروع إلى شبكة IP تستخدم واجهة شبكة متوافقة مع البث، مثل Wi-Fi أو Ethernet، ولكنها تستبعد الاتصالات عبر شبكة الجوّال (WWAN) أو شبكة VPN.
تُعدّ الشبكات التالية شبكات محلية:
IPv4:
- 169.254.0.0/16 // Link Local
- 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:
- Link-local
- المسارات المرتبطة مباشرةً
- شبكات الأجهزة الوهمية، مثل Thread
- الشبكات الفرعية المتعددة (يُحدَّد لاحقًا)
بالإضافة إلى ذلك، يتم تصنيف كل من عناوين البث المتعدد (224.0.0.0/4 وff00::/8) وعنوان البث IPv4 (255.255.255.255) كعناوين شبكة محلية.
الصور التي يملكها التطبيق
当面向 SDK 36 或更高版本的应用在搭载 Android 16 或更高版本的设备上提示用户授予照片和视频权限时,如果用户选择限制对所选媒体的访问权限,则会在照片选择器中看到该应用拥有的所有照片。用户可以取消选择任何这些预选项,这会撤消该应用对这些照片和视频的访问权限。