虽然互联网正在运行,代理下的应用程序无法在模拟器中工

时间:2012-07-05 08:57:23

标签: android android-emulator

我在模拟器中的2.2和2.3版本的android中启用了代理设置,并且互联网开始工作但我安装了一个应用程序(仅适用于代理)仍然无法正常工作。当我为4.0版本模拟器做同样的事情时,它正在那里工作。任何人都可以告诉,为什么它不适用于2.2和2.3版本,虽然互联网正在运作。

3 个答案:

答案 0 :(得分:6)

我还在Eclipse环境中为模拟器设置了代理。它正确地将代理地址添加到模拟器启动命令。

然而,在我进入模拟器中的WiFi设置并输入代理地址之前,我仍然只在某些应用程序(如浏览器)中工作,而不是在其他应用程序(如地图)中工作。

请注意,无法在此设置中的DNS名称之前使用http://,就像在模拟器启动行中一样。 (花了一个小时才搞清楚。)

答案 1 :(得分:4)

你应该试试这个(对于Android 2.3):

1. > adb shell
2. # sqlite3 /data/data/com.android.providers.settings/databases/settings.db
3. sqlite> INSERT INTO system VALUES(99,’http_proxy', 'proxy:port');
4. sqlite>.exit

此外,您可以尝试通过参数 http-proxy

启动模拟器时显式定义代理
emulator -avd yourAVD -http-proxy http://yourproxy:port

答案 2 :(得分:2)

在模拟器中配置代理允许浏览器应用程序使用它,但任何其他应用程序都需要能够访问互联网的HTTP代理。

假设您使用DefaultHttpClient类连接到互联网,您必须在进行连接之前将以下代码添加到Android应用程序中:

DefaultHttpClient client = new DefaultHttpClient();

HttpHost proxy = new HttpHost("yourproxy.domain.com", 3128); 
// Enter your proxy domain and port
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

如果您使用经过身份验证的代理,则还需要包含以下行:

client.getCredentialsProvider().setCredentials(
                new AuthScope("yourproxy.domain.com", 3128),
                new UsernamePasswordCredentials("proxyusername", "password"));

由于您希望相同的代码同时适用于模拟器和真实手机,因此您应该向应用程序添加一个设置,允许用户打开或关闭代理使用,并进入代理服务器/端口/凭证,而不是在应用程序中对它们进行硬编码。