2010-09-02 12 views
11

मैं एंड्रॉइड हैंडसेट के लिए http प्रॉक्सी सेटिंग्स सेट अप करने के लिए एक प्रोग्रामेटिक तरीका ढूंढ रहा हूं। मैंने system.HTTP_PROXY को सेट करने के लिए android.provider.Settings.System.putString() का उपयोग करने का प्रयास किया है, लेकिन मेरी कॉल विफल हो जाती है (मैं इस समय 2.2 एमुलेटर छवि का उपयोग कर रहा हूं)। मेरे कोड लगता है:आप http प्रॉक्सी प्रोग्रामेटिक रूप से कैसे सेट कर सकते हैं?

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

मैं अपने एंड्रॉयड प्रकट करने के लिए जोड़ दिया है:

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

..although यह डॉक्स जो अनुमति, यदि कोई हो, के लिए आवश्यक है से स्पष्ट नहीं है।

मैं this SO thread से परिचित हूं, लेकिन तकनीक के लिए मैन्युअल एडीबी कमांड की आवश्यकता होती है, जिसके लिए एसडीके उपकरण और (संभवतः) एक रूट फोन की आवश्यकता होती है।

क्या इसे पूरा करने का कोई तरीका है? आदर्श रूप में, मैं एक http प्रॉक्सी सेट करना चाहता हूं जिसका उपयोग डेटा और वाईफ़ाई दोनों कनेक्शनों के लिए किया जाएगा।

उत्तर

14

इसे तृतीय-पक्ष ऐप के रूप में करना संभव नहीं है। आपको यह संदेश मिलता है:

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) 

केवल क्षुधा है कि एक ही कुंजी के साथ प्रवेश किया हुआ है के रूप में सिस्टम ऐप्स इस अनुमति प्राप्त कर सकते हैं (यानी: यदि आप अपने स्वयं रॉम खाना बनाना, तो आप उस funcionality जोड़ सकता है)

और जानकारी इस सवाल पर अनुमति स्तर के बारे में, विशेष रूप से adamk का जवाब। आप call the com.android.settings.ProxySelector गतिविधि के लिए कोशिश करते हैं और उपयोगकर्ता प्रॉक्सी प्रवेश करने के लिए करते हैं

Why are these permissions being refused?

+0

क्या यह रूट डिवाइस पर काम कर सकता है? –

+1

शायद यह पुराने उपकरणों पर होगा, मैं निश्चित रूप से नियमों को लागू करने के बारे में निश्चित नहीं हूं ... –

10

यदि आप अपने आवेदन के लिए प्रॉक्सी का उपयोग सीमित कर रहे हैं तो आप Proxy और ProxySelector API का उपयोग कर सकते हैं।

+0

उस जानकारी के लिए धन्यवाद - दुर्भाग्य से मैं आमतौर पर डिवाइस पर प्रॉक्सी सेट करने की कोशिश कर रहा हूं (ताकि सभी ब्राउज़र इसका उपयोग करेंगे, उदाहरण के लिए ..)। –

1

आप अपने एप्लिकेशन वीएम के लिए प्रॉक्सी सेट कर सकते हैं, लेकिन सुरक्षा कारणों से, तृतीय पक्ष ऐप्स में डिवाइस प्रॉक्सी सेट करने की कार्यक्षमता नहीं हो सकती है।

-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” /> 

जोड़ना होगा।

0

किया? यह वैश्विक स्तर पर संग्रहीत है, लेकिन ऐसा लगता है कि यह मानक प्रॉक्सी और प्रॉक्सी सिलेक्टर एपीआई का समर्थन नहीं करता है (इस समस्या के लिए पहले से ही एक और सवाल है: How users/developers can set the Android's proxy configuration for versions 2.x?)

3

प्रॉक्सी चेक माइक के जवाब को सेट करने के लिए; बाद प्रॉक्सी विवरण

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

यह खाली लौट जाएँगे अगर कुछ अपवाद या कोई प्रॉक्सी का पता चला पुनः प्राप्त करने के कोड का टुकड़ा है,

संबंधित मुद्दे

 संबंधित मुद्दे