【问题标题】:How Android application decide if they want to use network proxy or notAndroid 应用程序如何决定是否要使用网络代理
【发布时间】:2024-01-14 13:25:01
【问题描述】:

我一直在使用 Android 3.2 的摩托罗拉 Xoom 上使用 wifi 代理设置进行一些测试。所以首先,与 2.x 版本相比,这是一个很大的进步。现在如果你设置代理,大多数应用程序会自动获取它(在 2.x 中,只有内置浏览器使用它)。所以我尝试了雅虎金融、彭博社等,他们都通过代理罚款。我不明白的是某些浏览器,如 firefox、Opera,不会通过代理。知道他们是怎么做到的。基本上在我的应用程序中,我如何决定是要使用代理还是尝试直接连接。根据我的测试,如果我们不做任何特别的事情,默认是使用代理。那么我需要怎么做才能让我的应用绕过 Firefox/Opera 等代理?

谢谢!

【问题讨论】:

    标签: android networking proxy wifi android-3.0-honeycomb


    【解决方案1】:

    在 API 版本 >=11(Android 3.1 及更高版本)的设备上,答案在这里:

    Android's proxy confusing documentation resources

    您可以简单地从 ProxySelector 类中调用 getDefault() 方法并获取 ProxySelector 的默认 Android 实现。

    ProxySelector defaultProxySelector = ProxySelector.getDefault();
    Proxy proxy = null;
    List<Proxy> proxyList = defaultProxySelector.select(uri);
    if (proxyList.size() > 0)
    {
      proxy = proxyList.get(0);
      Log.d(TAG, "Current Proxy Configuration: " + proxy.toString());
    }
    

    我认为一些 Android 应用程序(你说 Opera 和 Firefox)根本不做这个检查,而是实现了一些本地代理处理而不关心系统如何工作。

    【讨论】:

    • 谢谢,勒查克。但根据我的测试,我不需要像你在我的应用程序中所说的那样做任何事情。我只是做了一个基本的 HttpClient Get,我可以看到它正在通过我的 Xoom 上的代理。所以我认为默认情况下,如果您使用内置网络堆栈,所有网络流量都会通过蜂窝和 ICS 中的代理。这通常是正确的做法,因为您不希望每个应用程序都必须自己设置代理。但是在我的特定应用程序中,我确实想“绕过”代理并尝试直接连接。我想知道是否有任何设置允许我这样做。有什么想法吗?
    • 尽量避免使用 HttpClient,建议 here 和解释 here (至少对于代理细节)。 Android 团队似乎不支持它。 HttpURLConnection 类要求开发者在需要时明确指定代理。
    • 我在你的博客上看到你发布了一个用于kindle fire的代理设置应用程序。它运作良好吗?几周前我实际上退回了我的kindle fire,因为我无法设置代理。如果可行,我可能会考虑回去买一个。 :-)
    • 我在亚马逊应用商店发布了该应用。 Kindle Fire 的流程审查仍在评估中。我会在博客上发布更新。请继续关注。
    • 但它显示在他们的网站上。所以还是不能下载?他们的评估过程需要多长时间。 amazon.com/LeChuck-Software-Proxy-Settings/dp/B007D3TMK6/…
    最近更新 更多