You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android应用连接服务器失败,报错SocketException权限被拒

解决方案:Flutter Android应用Socket权限拒绝(Errno 13)问题

针对你遇到的SocketException: Connection failed (OS Error: Permission denied, errno = 13)问题,即使添加了INTERNET权限仍无法连接,按以下步骤排查修复:

1. 确认权限放置位置正确

确保INTERNET权限声明在<manifest>标签内、<application>标签之外,错误的位置会导致权限不生效:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.your_app">

    <!-- 权限必须放在此处 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:label="Your App"
        android:icon="@mipmap/ic_launcher">
        <!-- 应用内容配置 -->
    </application>
</manifest>

2. 允许明文网络流量(Android 10+)

如果你的服务器使用HTTP而非HTTPS,Android 10(API 29)及以上系统默认禁止明文流量,需在<application>标签中添加配置:

<application
    android:usesCleartextTraffic="true"
    <!-- 其他原有配置 -->
    >
    ...
</application>

3. 强制保留权限(针对App Bundle构建)

若使用Android App Bundle(AAB)发布,Google Play可能自动剥离未被代码直接调用的权限,需添加tools:node="merge"强制保留:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" <!-- 新增tools命名空间 -->
    package="com.example.your_app">

    <uses-permission android:name="android.permission.INTERNET" tools:node="merge"/>
    ...
</manifest>

4. 清理缓存并重新构建

项目缓存可能导致权限配置不生效,执行以下操作:

  • 运行终端命令:flutter clean
  • 删除android/app/build目录下的所有文件
  • 重启开发工具(Android Studio/VS Code)
  • 重新运行flutter run

5. 修复IP输入框的键盘类型

当前IP输入框的keyboardType为TextInputType.number,无法输入小数点,会导致用户输入无效IP地址(间接引发连接问题),修改为:

TextFormField(
  controller: _ipController,
  keyboardType: TextInputType.numberWithOptions(decimal: true), // 允许输入小数点
  decoration: InputDecoration(
    hintText: 'Enter IP Address',
  ),
),

内容的提问来源于stack exchange,提问作者Adeleh Poursadegh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:40:28