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

如何在MAUI应用中使用C#设置Android系统代理

在MAUI Android中设置系统代理的正确方法

你之前用Java.Lang.JavaSystem.SetProperty设置代理的方式,仅能对当前应用内使用Java网络栈的请求生效,并非真正的系统级代理,所以达不到预期效果。以下是不同Android版本下设置系统代理的可行方案:

Android 9(API 28)及以下版本

可以通过ConnectivityManager直接设置全局代理:

1. 添加必要权限

在Android项目的AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

2. 请求WRITE_SETTINGS权限(需用户手动授权)

WRITE_SETTINGS属于特殊权限,必须引导用户到系统设置页面开启:

using Android.Content;
using Android.App;
using Android.Provider;

if (!Settings.System.CanWrite(Application.Context))
{
    var intent = new Intent(Settings.ActionManageWriteSettings);
    intent.SetData(Android.Net.Uri.Parse($"package:{Application.Context.PackageName}"));
    intent.AddFlags(ActivityFlags.NewTask);
    Application.Context.StartActivity(intent);
}

3. 设置代理代码

using Android.Net;
using Android.Content;

var connectivityManager = (ConnectivityManager)Application.Context.GetSystemService(Context.ConnectivityService);
var proxyProps = new ProxyProperties("127.0.0.1", 8080, null);
connectivityManager.SetGlobalProxy(proxyProps);

Android 10(API 29)及以上版本

从Android 10开始,系统限制了普通应用直接修改全局代理的权限,分两种场景处理:

场景1:企业应用(拥有设备管理员权限)

如果你的应用是企业管理类应用,可以通过DevicePolicyManager设置代理:

using Android.App.Admin;
using Android.Content;

var devicePolicyManager = (DevicePolicyManager)Application.Context.GetSystemService(Context.DevicePolicyService);
var adminComponent = new ComponentName(Application.Context, typeof(YourDeviceAdminReceiver)); // 需自定义DeviceAdminReceiver子类

if (devicePolicyManager.IsAdminActive(adminComponent))
{
    var proxyInfo = ProxyInfo.BuildDirectProxy("127.0.0.1", 8080);
    devicePolicyManager.SetGlobalProxy(adminComponent, proxyInfo);
}

注意:此方式需要应用先成为设备管理员,用户需手动确认激活。

场景2:普通应用

普通应用无法通过代码直接设置系统代理,只能引导用户前往系统设置页面手动配置:

using Android.Content;
using Android.App;
using Android.Provider;

var intent = new Intent(Settings.ActionProxySettings);
intent.AddFlags(ActivityFlags.NewTask);
Application.Context.StartActivity(intent);

内容的提问来源于stack exchange,提问作者Arnold Zahrneinder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:10:23