android - 在 Android 中获取 WiFi 代理设置

标签 android proxy wifi

我正在尝试读取 WIFI 代理设置

  • 代理主机
  • 代理端口
  • 代理用户(认证)
  • 代理密码(认证)

从 android 版本 2.X.X – 4.X.X 的设备没有任何成功。

调用:

String proxy = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.HTTP_PROXY);

始终返回 null。

我还添加到我的 android list 中:

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

它仍然返回 null。

还试过:

android.net.Proxy. getHost(Context ctx) – which is deprecated – returns the IP
android.net.Proxy. getPortt(Context ctx) – which is deprecated – returns always -1.

Java 调用:

System.getProperty("http.proxyHost");
System.getProperty("http.proxyCall");

也返回 null。

是否有一个工作代码可以检索所有这些设置或至少部分来自所有 android 版本的设备?

最佳答案

我找到了这个项目:Android Proxy Library 它提供了向后兼容的方式来查询代理设置以及在旧版 Android 上为 WebView 设置它们。

    // Grab Proxy settings in a backwards compatible manner
    ProxyConfiguration proxyConfig = ProxySettings.getCurrentHttpProxyConfiguration( context );

    // Set Proxy for WebViews on older versions of Android
    ProxyUtils.setWebViewProxy( getActivity().getApplicationContext() );

但是,对于在 WiFi AP 上设置的代理设置,您需要了解一些内容。由于 WiFi 特定的代理设置直到 3.1 才在 Android 中实现,所有公开该功能的 3.1 之前的设备都使用某种自定义 hack。它们不以任何标准方式工作。所以像这样的库将无法从其中一个黑客中获取任何代理集。

但是在 3.1 之前的系统中有一个系统范围代理,这种库将会获取。当然,Android 认为不提供任何官方方式来修改此设置是合适的。但是 Play 商店中有一些应用程序可以让您这样做,这就是我正在使用的应用程序:Proxy Settings它运作良好,设置系统代理并允许您通过此库或更简单的方法(如查询 JVM 代理设置)获取它。

我最终没有使用 APL,而是使用了一个更简单的实现:

    private static final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;

    ...

    String proxyAddress;
    int proxyPort;

    if( IS_ICS_OR_LATER )
    {
        proxyAddress = System.getProperty( "http.proxyHost" );

        String portStr = System.getProperty( "http.proxyPort" );
        proxyPort = Integer.parseInt( ( portStr != null ? portStr : "-1" ) );
    }
    else
    {
        proxyAddress = android.net.Proxy.getHost( context );
        proxyPort = android.net.Proxy.getPort( context );
    }

关于android - 在 Android 中获取 WiFi 代理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811698/

相关文章:

java - 如何以编程方式为 JMeter 设置代理设置,而无需使用命令行运行它

macos - 在 Mac OSX 上使用 WiFi 检测或发现附近的 iOS 设备或 Android 设备

android - Easypermissions 不返回方法

Android webview 多点触控缩放在 HVGA 中不起作用

java - Maven:无法找到请求目标的有效证书路径

wifi - 在 Windows 10 中启用/禁用热点虚拟 Wifi 时出错

Android Things - Raspberry Pi 无法连接 Wifi

android - 无法从 Loader<Object> 转换为 CursorLoader

android - 使用 LibGDX 的 Facebook 登录 3.0

proxy - Apigee - 使用目标服务器时修改目标路径