2010-09-02 25 views
11

Tôi đang tìm một cách lập trình để thiết lập cài đặt proxy http cho điện thoại di động Android. Tôi đã thử bằng cách sử dụng android.provider.Settings.System.putString() để đặt System.HTTP_PROXY, nhưng cuộc gọi của tôi không thành công (tôi đang sử dụng hình ảnh trình giả lập 2.2 vào lúc này). Mã của tôi trông giống như:Làm thế nào bạn có thể đặt proxy http theo chương trình?

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"); 
} 

Tôi cũng đã thêm vào manifest android của tôi:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 

..although nó không phải là rõ ràng từ các tài liệu đó cho phép, nếu có, là bắt buộc.

Tôi quen thuộc với this SO thread, nhưng kỹ thuật ở đó yêu cầu các lệnh adb thủ công, yêu cầu công cụ SDK và (có thể) điện thoại gốc.

Có cách nào để thực hiện việc này không? Lý tưởng nhất, tôi muốn đi để thiết lập một proxy http sẽ được sử dụng cho cả dữ liệu và kết nối wifi.

Trả lời

14

Không thể thực hiện việc này dưới dạng ứng dụng của bên thứ ba. Bạn nhận được thông điệp này:

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) 
Chỉ

ứng dụng được ký kết với phím tương tự như ứng dụng hệ thống có thể nhận được sự cho phép này (ví dụ: nếu bạn nấu rom của riêng bạn, bạn có thể thêm funcionality đó)

Thông tin thêm về mức độ cho phép về câu hỏi này, đặc biệt là câu trả lời của adamk. bạn

Why are these permissions being refused?

+0

nó có thể hoạt động trên thiết bị Rooted không? –

+1

Nó có thể sẽ trên các thiết bị cũ, tôi không chắc chắn về SElinux Enforcing rules ... –

10

Nếu bạn đang giới hạn việc sử dụng proxy cho ứng dụng của riêng mình, bạn có thể sử dụng API ProxyProxySelector.

+0

cảm ơn thông tin đó - tiếc là tôi đang cố đặt proxy chung trên thiết bị (để tất cả các trình duyệt sẽ sử dụng nó, ví dụ ..). –

1

Bạn có thể đặt proxy cho máy ảo ứng dụng của mình, nhưng vì lý do bảo mật, ứng dụng của bên thứ ba có thể không có chức năng đặt proxy thiết bị.

-1

tôi tìm thấy một cái gì đó here rằng có vẻ như nó có thể làm việc

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){ 
       } 
      } 
     }); 
    } 
} 

Bạn phải thêm

<uses-permission android:name=”android.permission.WRITE_SETTINGS” /> 

đến biểu hiện của bạn.

3

Để đặt kiểm tra proxy Câu trả lời của Mike; Sau đây là đoạn mã để truy xuất chi tiết proxy

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; 
    } 

Nó sẽ trở lại trống nếu một số ngoại lệ hoặc không có proxy được phát hiện;

Các vấn đề liên quan