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

Xamarin.Forms Android应用无法联网,已开启权限仍未解决

嘿,我来帮你搞定Xamarin.Forms Android端的联网问题!你已经加了Internet权限但还是不行,我猜大概率是这几个点没配置对,咱们一步步排查:

1. 先搞定Android 9+的明文网络限制

从Android 9(API 28)开始,系统默认禁止明文HTTP请求(只允许HTTPS),如果你的接口是HTTP协议,这会直接导致联网失败。解决方法如下:

  • 在Android项目的Resources/xml文件夹下新建network_security_config.xml,写入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- 允许所有域名的明文请求,适合测试阶段 -->
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
  • 然后在AndroidManifest.xml的<application>标签里引用这个配置:
<application 
    android:label="你的应用名" 
    android:networkSecurityConfig="@xml/network_security_config">
</application>

如果是正式环境,更建议只给特定域名开明文权限,替换成下面的配置更安全:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">你的接口域名.com</domain>
    </domain-config>
</network-security-config>
2. 确认权限和HttpClient实现配置

首先再检查下AndroidManifest.xml里的权限是否放对位置(要放在<application>标签外面):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 可选但建议加,方便检测网络状态 -->

然后检查HttpClient的实现:
打开Android项目的Properties → Android Options → Advanced,把HttpClient Implementation改成AndroidClientHandler(新版本Xamarin推荐)或者Managed,不同的实现可能会有兼容性问题。

3. 修复代码里的异步逻辑问题

看你的代码片段,你直接在MainPage的构造函数里用了await,但构造函数不能是异步的!这会导致异步操作没有被正确等待,看起来像是联网失败,但其实是代码执行顺序出了问题。改成下面的写法:

public MainPage() { 
    InitializeComponent(); 
}

// 把异步逻辑放到页面显示时执行
protected override async void OnAppearing()
{
    base.OnAppearing();
    await LoadRaceData();
}

private async Task LoadRaceData()
{
    HttpClient client = new HttpClient(); 
    CurrentRaceInfo cur_race = new CurrentRaceInfo(); 
    try { 
        var cur_racedetail = await client.GetStringAsync("你的实际接口URL");
        // 在这里处理返回的数据
    } catch (Exception ex)
    {
        // 一定要捕获具体异常!比如SocketException、HttpRequestException,能帮你精准定位问题
        Console.WriteLine($"联网出错:{ex.Message}\n{ex.StackTrace}");
    }
}
4. 最后排查基础问题
  • 确认模拟器/测试设备的网络是否正常,用浏览器直接打开你的接口URL试试
  • 如果是模拟器,切换下网络模式(比如从Wi-Fi切到蜂窝数据模拟)
  • 检查Android项目的目标SDK版本,API 33+不需要额外申请Internet权限(它属于正常权限,不需要动态申请),但可以确认下权限有没有被ProGuard规则意外裁剪

内容的提问来源于stack exchange,提问作者Joe Ricklefs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:30:48