2012-05-16 6 views
13

पर कोई जानकारी नहीं के बारे में Settings.Secure.HTTP_PROXY निम्नलिखित: वैश्विक HTTP प्रॉक्सी के लिएSettings.Secure.HTTP_PROXY आईसीएस में पदावनत लेकिन Android डेवलपर डॉक्स कहना प्रतिस्थापन

होस्ट नाम और पोर्ट। मेजबान और बंदरगाह TODO के बीच के लिए विभाजक - global_http_proxy_host के पक्ष में विरोध, आदि

लेकिन वहाँ global_http_proxy_host बारे में कोई जानकारी नहीं है: का उपयोग करता है। '' Settings.Secure.HTTP_PROXY पढ़ने की कोशिश करते समय अब ​​मुझे null मिलता है।

Settings.Secure.HTTP_PROXY आईसीएस से पहले सभी रिलीज में ठीक से काम कर रहा था।

उत्तर

5

आप आईसीएस पर परीक्षण किए गए वैश्विक प्रॉक्सी सेट करने के लिए जावा प्रतिबिंब का उपयोग कर सकते हैं।

अपडेट किए गए कोड

Activity activity = this; 


private void setProxtAndPortOnICS(String porxyServer2, int port2) 
{ 
      try 
{ 
    Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge"); 
    Class params[] = new Class[1]; 
    params[0] = Class.forName("android.net.ProxyProperties"); 
    Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params); 

    Class wv = Class.forName("android.webkit.WebView"); 
    Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore"); 
    Object mWebViewCoreFieldIntance = getFieldValueSafely(mWebViewCoreField, oauthPage); 

    Class wvc = Class.forName("android.webkit.WebViewCore"); 
    Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame"); 
    Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldIntance); 

    Class bf = Class.forName("android.webkit.BrowserFrame"); 
    Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge"); 
    Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame); 

    Class ppclass = Class.forName("android.net.ProxyProperties"); 
Class pparams[] = new Class[3]; 
pparams[0] = String.class; 
pparams[1] = int.class; 
pparams[2] = String.class; 
Constructor ppcont = ppclass.getConstructor(pparams); 

updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance("my.proxy.com", 1234, null)); 
} 
catch (Exception ex) 
{  
} 


} 


private Object getFieldValueSafely(Field field, Object classInstance) throws IllegalArgumentException, IllegalAccessException { 
    boolean oldAccessibleValue = field.isAccessible(); 
    field.setAccessible(true); 
    Object result = field.get(classInstance); 
    field.setAccessible(oldAccessibleValue); 
    return result;  
} 

अब आप प्रॉक्सी सर्वर का उपयोग यूआरएल को फ़िल्टर कर सकते।

या this ब्लॉग देखें यह चीनी में है लेकिन आप कोड को पढ़ सकते हैं जिसे समझने में काफी आसान है।

+0

धन्यवाद, सनी! क्या आप कृपया मुझे बता सकते हैं कि आपके कोड उदाहरण में oauthPage क्या उपयोग किया जाता है? तो यह आपके ऐप के लिए प्रॉक्सी सेट करेगा या यह वैश्विक स्तर पर सभी ऐप्स को प्रभावित करेगा? – Safecoder

+0

तो अगर मैं इसे सही ढंग से समझता हूं, तो यह केवल एक ओथपेज के लिए प्रॉक्सी सेट करता है, जो एक वेबव्यू ऑब्जेक्ट है। क्या यह सही है? क्या मैं अपने ऐप के लिए अपने सभी http ट्रैफ़िक के लिए प्रॉक्सी सेट करने के लिए इसका उपयोग कर सकता हूं? जो मैं खोज रहा हूं वह एक वैश्विक सेटिंग है, जिसका अर्थ है कि यह अन्य ऐप्स को भी प्रभावित करेगा, उदाहरण के लिए ब्राउज़र। कृपया मुझे अपने विचारों से अवगत कराएं। धन्यवाद! – Safecoder

+0

मैंने केवल एक वेबव्यू ऑब्जेक्ट के साथ एक साधारण परीक्षण केस की कोशिश की। फिर प्रॉक्सी सेट करने के लिए अपने कोड का इस्तेमाल किया। क्योंकि आप my.proxy.com:1234 प्रॉक्सी के रूप में उपयोग करते हैं, इसलिए मुझे उम्मीद है कि वेबव्यू लोड होने में विफल रहेगा क्योंकि ऐसी प्रॉक्सी मौजूद नहीं है। लेकिन यह बिना किसी समस्या के google.com लोड करता है। क्या आपके पास एक कामकाजी परियोजना है जिसे मैं कोशिश कर सकता हूं? मैंने आपके लिंक में कोड भी आज़माया और ProxySettings.setProxy (यह, "my.proxy.com", 1234) कहा; लेकिन कोई प्रभाव नहीं। वेबव्यू लोड पेज बस ठीक है। – Safecoder

1

मैं सिर्फ दस्तावेज कहता हूं, लेकिन यह मुझे पढ़ता है कि Settings.Secure.HTTP_PROXY वर्तमान में बहिष्कृत नहीं है। प्रलेखन में (मैला) नोट सिर्फ एक डेवलपर नोट था कि यह एंड्रॉइड टीम भविष्य में करने पर विचार कर सकता है।

+0

धन्यवाद, टोनी। मूल पोस्ट में बस और जानकारी जोड़ा गया। मैं आईसीएस में वैश्विक प्रॉक्सी सेट करने का एक तरीका ढूंढ रहा हूं। मैं आईसीएस से पहले रिलीज के लिए सेटिंग्स.Secure.HTTP_PROXY सेट करने के लिए एक छिपी हुई गतिविधि का उपयोग कर रहा हूं। लेकिन अब यह और काम नहीं कर रहा है। कोई सुझाव? – Safecoder

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