如何以编程方式设置http代理?

Mik*_*ery 13 android

我正在寻找一种以编程方式设置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");
}
Run Code Online (Sandbox Code Playgroud)

我还添加到我的Android清单:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)

..但是从文档中不清楚哪些是必需的,如果有的话.

我熟悉这个SO线程,但是那里的技术需要手动adb命令,这需要SDK工具和(可能)root用户手机.

有没有办法实现这个目标?理想情况下,我想要设置一个将用于数据和wifi连接的http代理.

M G*_*nja 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)
Run Code Online (Sandbox Code Playgroud)

只有使用与系统应用程序相同的密钥签名的应用程序才能获得此权限(即:如果您自己烹饪rom,则可以添加该功能)

有关此问题的权限级别的更多信息,特别是adamk的答案.

为什么拒绝这些权限?


Jcs*_*Jcs 12

如果要将代理的使用限制在自己的应用程序中,则可以使用ProxyProxySelector API.