我正在寻找一种以编程方式设置Android手机的http代理设置。我已经尝试使用android.provider.Settings.System.putString()来设置System.HTTP_PROXY,但是我的调用失败了(我现在使用的是2.2仿真器图像)。我的代码如下:
if (System.putString(getContentResolver(), System.HTTP_PROXY, "10.10.2.1:8080")) {
tv.append("put for HTTP_PROXY succeeded.\n");
}
else {
tv.append("put for HTTP_PROXY failed.\n");
}
我还添加到我的Android清单中:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
..虽然从文档中不清楚哪些是必需的,但如果需要的话。
我熟悉this SO thread,但其中的技术需要手动adb命令,这些命令需要SDK工具和(可能)根电话。
有没有办法实现这个目标?理想情况下,我想要设置一个将用于数据和wifi连接的http代理。
答案 0 :(得分:15)
这不可能作为第三方应用程序执行此操作。你收到这条消息:
12-07 12:39:37.736: W/PackageManager(85): Not granting permission android.permission.WRITE_SECURE_SETTINGS to package com.mgranja.xxxxxxx (protectionLevel=3 flags=0xbe46)
只有使用与系统应用程序相同的密钥签名的应用才能获得此权限(例如:如果您自己制作rom,则可以添加该功能)
有关此问题的权限级别的更多信息,特别是adamk的答案。
答案 1 :(得分:12)
如果您将代理的使用限制在自己的应用程序中,则可以使用Proxy和ProxySelector API。
答案 2 :(得分:3)
设置代理检查Mike的答案; 以下是检索代理详细信息的代码段
public static String getProxyDetails(Context context) {
String proxyAddress = new String();
try {
if (IsPreIcs()) {
proxyAddress = android.net.Proxy.getHost(context);
if (proxyAddress == null || proxyAddress.equals("")) {
return proxyAddress;
}
proxyAddress += ":" + android.net.Proxy.getPort(context);
} else {
proxyAddress = System.getProperty("http.proxyHost");
proxyAddress += ":" + System.getProperty("http.proxyPort");
}
} catch (Exception ex) {
//ignore
}
return proxyAddress;
}
如果检测到某些异常或没有代理,它将返回空;
答案 3 :(得分:1)
您可以为应用程序VM设置代理,但由于安全原因,第三方应用程序可能没有设置设备代理的功能。
答案 4 :(得分:0)
您是否尝试call the com.android.settings.ProxySelector
活动并让用户输入代理?它存储在全局,但似乎它不支持标准的Proxy和ProxySelector API(对于这个问题,还有另一个问题:How users/developers can set the Android's proxy configuration for versions 2.x?)
答案 5 :(得分:-1)
我找到了here看起来可能有效的内容
package com.BrowserSettings;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.provider.Settings;
public class BrowserSettingsUI extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try {
Settings.System.putString(getContentResolver(),
Settings.System.HTTP_PROXY, "127.0.0.1:100");//enable proxy
}catch (Exception ex){
}
}
});
final Button button2 = (Button) findViewById(R.id.Button02);
button2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try {
Settings.System.putString(getContentResolver(),
Settings.System.HTTP_PROXY, "");//disable proxy
}catch (Exception ex){
}
}
});
}
}
您必须添加
<uses-permission android:name=”android.permission.WRITE_SETTINGS” />
到您的清单。