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

Xamarin开发Android9三星Galaxy S8调用AddNetwork返回-1如何解决

三星Galaxy S8搭载的安卓9版本(One UI 1.x)对WifiConfiguration的参数校验逻辑比原生安卓严格很多,冗余的不匹配加密参数、缺失权限、已有重复配置都会导致AddNetwork直接返回-1。以下是可落地的修复方案:

  • 精简WifiConfiguration参数,仅保留目标WiFi实际使用的配置项,不要加入当前安卓版本不支持或者当前网络不需要的参数。安卓9原生不支持WPA3的SAE加密,额外添加KeyManagementType.Sae、WEP相关参数会触发三星的参数校验拦截。
    修改后的代码示例如下:
var config = new WifiConfiguration();
config.Ssid = "\"" + ssid + "\"";
config.PreSharedKey = "\"" + password + "\"";
// 仅保留WPA/WPA2 PSK所需的基础参数
config.AllowedAuthAlgorithms.Set((int)AuthAlgorithmType.Open);
config.AllowedProtocols.Set((int)ProtocolType.Wpa);
config.AllowedProtocols.Set((int)ProtocolType.Rsn);
config.AllowedKeyManagement.Set((int)KeyManagementType.WpaPsk);
config.AllowedPairwiseCiphers.Set((int)PairwiseCipherType.Tkip);
config.AllowedPairwiseCiphers.Set((int)PairwiseCipherType.Ccmp);
config.AllowedGroupCiphers.Set((int)GroupCipherType.Tkip);
config.AllowedGroupCiphers.Set((int)GroupCipherType.Ccmp);

// 添加前先移除已存在的同SSID配置
var existingNetworks = WifiManager.ConfiguredNetworks;
if (existingNetworks != null)
{
    foreach (var existing in existingNetworks)
    {
        if (existing.Ssid == config.Ssid)
        {
            WifiManager.RemoveNetwork(existing.NetworkId);
        }
    }
}

var addReturn = WifiManager.AddNetwork(config);
if (addReturn != -1)
{
    // 三星设备必须显式调用保存配置
    WifiManager.SaveConfiguration();
    // 可选:立即连接该网络
    WifiManager.Disconnect();
    WifiManager.EnableNetwork(addReturn, true);
    WifiManager.Reconnect();
}
  • 确保已经动态申请了位置权限。安卓9要求连接WiFi必须获取ACCESS_FINE_LOCATION运行时权限,三星对权限校验更严格,仅在AndroidManifest.xml静态声明权限会导致AddNetwork返回-1,必须在调用接口前弹窗申请用户授权。
  • 检查应用是否被三星系统的智能管理器、权限管理禁用了WiFi相关权限,部分三星设备会默认禁止第三方应用修改WiFi配置,可引导用户到应用权限设置页开启「更改WiFi状态」「位置信息」权限后重试。

内容的提问来源于stack exchange,提问作者Tomohisa Takaoka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:57:00