[Android] How to set proxy for android browser
There are many reasons to make browser serf pages through proxy server:
- someone wanna catch http requests/responses
- someone wanna hide his IP
- so on
What to do if you want set proxy for android browser? there some ways:
- add record to database: /data/data/com.android.providers.settings/databases/settings.db
- pull database to pc add record (using for example sdk tool sqlite3) and replace existing db
- make changes in database directly on device
but as for me there exist simplier way, do it by your Java application using Settings provider:
Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, "proxy_ip:proxy_port");
where proxy_ip/proxy_port = IP/port of proxy that you going to use.
there left one problem, it will not work if we will not add one string to manifest file, here it is:
<uses-permission android:name=”android.permission.WRITE_SETTINGS” />
Thats all, now it works, here is code:
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){
}
}
});
}
}
manifest file:
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.BrowserSettings”
android:versionCode=”1″
android:versionName=”1.0.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>
<activity android:name=”.BrowserSettingsUI”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
<uses-permission android:name=”android.permission.WRITE_SETTINGS” />
</manifest>
Filed under: Programming
July 14th, 2010 at 11:25 am
Yes, it works at my Hero
July 8th, 2010 at 7:30 am
Using ECLIPSE I modified a “helloworld”-kind application, added the permission in the androidmanifest.xml () and included the Setting suggested after a text message. No compiler errors, transferred on device (HTC desire), but no results… still I cannot browse internet.
Probably the “set” command is not really working, or it is inhibited by permission problem…?
Greg Ruo
PS: Below is the code I used
================================
package com.BrowserSettings;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.provider.Settings;
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
TextView tv = new TextView(this);
tv.setText(”! Should Set proxy OK !!”);
setContentView(tv);
Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, “xxx.xxx.xxx.xxx:8080″);
}
}
=========================================-