我正在尝试读取 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/