12)在瀏覽器中添加基于PreferenceActivity框架的設(shè)置代理UI界面,如圖1所示,所述UI界面具有“不使用代理”、“使用系統(tǒng)代理”和“手動設(shè)置代理”模塊,以及設(shè)置代理IP和端口號的模塊。
[0019]也可以在不增加設(shè)置代理的API的情況下,實現(xiàn)本發(fā)明的基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,此種狀況下該方法包括以下步驟:
21)更改瀏覽器系統(tǒng)庫,讓其不再接受系統(tǒng)代理發(fā)出的廣播,達(dá)到瀏覽器代理獨立于系統(tǒng)代理,不受系統(tǒng)代理影響的目的。更改chromium net庫java層代碼,通過動態(tài)注冊廣播接收器ProxyReceiver,該廣播接收器默認(rèn)會接收系統(tǒng)網(wǎng)絡(luò)代理發(fā)送改變后所發(fā)出的廣播Proxy.PR0XY_CHANGE_ACT10N,更改廣播接收器后,其不再接收系統(tǒng)網(wǎng)絡(luò)代理發(fā)生改變的廣播,而是讓其接收用戶在UI界面手動設(shè)置代理時所發(fā)出的自定義廣播android, intent,act1n.MY_PROXY_CHANGE,然后在 ProxyReceiver 的 onReceive 中接收到自定義廣播后,從intent中解析出用戶代理數(shù)據(jù),通過JNI調(diào)用網(wǎng)絡(luò)庫Native方法,將代理數(shù)據(jù)進(jìn)一步設(shè)置到網(wǎng)絡(luò)庫Native層,從而達(dá)到設(shè)置代理的目的,也達(dá)到了獨立于系統(tǒng)代理的目的。如果用戶選擇的是使用系統(tǒng)代理,則從數(shù)據(jù)庫中讀取用戶設(shè)置的系統(tǒng)代理,同樣通過上述自定義廣播,攜帶代理數(shù)據(jù),最終發(fā)送到網(wǎng)絡(luò)庫底層。
[0020]22)在瀏覽器中添加基于PreferenceActivity框架的設(shè)置代理UI界面,所述UI界面具有“不使用代理”、“使用系統(tǒng)代理”和“手動設(shè)置代理”模塊,以及設(shè)置代理IP和端口號的模塊,UI界面的設(shè)置項的信息最終通過SharePreference以key — value的方式保存到和瀏覽器相關(guān)的本地文件中;
最后完成UI界面相關(guān)事件的處理工作。處理工作包括:處理NetProxyPreferencesFragment:: onPreferenceChange, DialogPreference:: onDialogClosed 等回調(diào)函數(shù),在回調(diào)函數(shù)中,主要就是將用戶設(shè)置的網(wǎng)絡(luò)代理數(shù)據(jù)設(shè)置到intent中,然后通過一個自定義廣播攜帶該intent發(fā)送到網(wǎng)絡(luò)庫java層的BroadcastReceiver中,然后在網(wǎng)路庫java層又進(jìn)一步將網(wǎng)絡(luò)代理數(shù)據(jù)設(shè)置到底層的Native層網(wǎng)絡(luò)庫,從而打通了從用戶界面到Native層網(wǎng)絡(luò)庫的通道。
[0021]其他APP也可以實現(xiàn)上述設(shè)置。
[0022]如果用戶選擇不使用代理,禁用UI界面的相關(guān)設(shè)置項,發(fā)送一個廣播A出去,攜帶不使用代理的相關(guān)信息,然后網(wǎng)絡(luò)庫動態(tài)注冊接受這個廣播A,并從廣播A中解析出相關(guān)信息,然后將不使用代理的信息設(shè)置給網(wǎng)絡(luò)庫。
[0023]如果用戶選擇的是使用系統(tǒng)代理,禁用UI界面的相關(guān)設(shè)置項,由于系統(tǒng)代理設(shè)置的信息是以Content Provider的方式與其它應(yīng)用程序共享,所以這里我們可以通過ContentResolver的方式獲取到系統(tǒng)代理信息,在獲取到系統(tǒng)代理信息后,同樣攜帶系統(tǒng)代理信息,以廣播的方式發(fā)送出去,網(wǎng)絡(luò)庫在接受到廣播后,從中解析出系統(tǒng)代理的相關(guān)信息,設(shè)置給自身。如果用戶沒有設(shè)置系統(tǒng)代理,則瀏覽器本身也不通過代理聯(lián)網(wǎng)。
[0024]如果用戶選擇的是手動設(shè)置代理,則要求用戶進(jìn)一步手動設(shè)置詳細(xì)的代理信息,最后在得到用戶最終確認(rèn)后,以廣播的方式將用戶手動設(shè)置的代理信息發(fā)送給網(wǎng)絡(luò)庫,網(wǎng)絡(luò)庫解析出代理信息后,設(shè)置給底層網(wǎng)絡(luò)庫。
[0025]通過上面的【具體實施方式】的描述,本發(fā)明的內(nèi)容已經(jīng)非常詳細(xì),本領(lǐng)域的技術(shù)人員都能根據(jù)所述內(nèi)容重現(xiàn)所述方法。當(dāng)然,本領(lǐng)域的技術(shù)人員可以在不脫離本發(fā)明的思想和方法范圍內(nèi),對本發(fā)明進(jìn)行各種改動和變型。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【主權(quán)項】
1.一種基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,其特征在于,包括以下步驟: 11)擴(kuò)展android webview framework,為 webview 新增一個設(shè)置代理的 API ; 12)在APP中添加基于PreferenceActivity框架的設(shè)置代理UI界面,所述UI界面具有“不使用代理”、“使用系統(tǒng)代理”和“手動設(shè)置代理”模塊,以及設(shè)置代理IP和端口號的模塊,UI界面的設(shè)置項的信息最終通過SharePreference以key — value的方式保存到和瀏覽器相關(guān)的本地文件中。2.根據(jù)權(quán)利要求1所述的基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,其特征在于,包括以下步驟: 將所述步驟11)替換為21)更改APP系統(tǒng)庫,讓其不再接受系統(tǒng)代理發(fā)出的廣播。3.根據(jù)權(quán)利要求1或2所述的基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,其特征在于,所述APP是瀏覽器。4.根據(jù)權(quán)利要求3所述的基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,其特征在于,所述更改APP系統(tǒng)庫包括更改chromium net庫java層代碼,通過動態(tài)注冊廣播接收器ProxyReceiver,該廣播接收器默認(rèn)接收系統(tǒng)網(wǎng)絡(luò)代理發(fā)送改變后所發(fā)出的廣播Proxy.PROXY_CHANGE_ACT I ON ; ProxyReceiver 的 onReceive 中接收到自定義廣播后,從 intent中解析出用戶代理數(shù)據(jù),通過JNI調(diào)用網(wǎng)絡(luò)庫Native方法,將代理數(shù)據(jù)進(jìn)一步設(shè)置到網(wǎng)絡(luò)庫Native層,從而達(dá)到設(shè)置代理的目的;如果用戶選擇的是使用系統(tǒng)代理,則從數(shù)據(jù)庫中讀取用戶設(shè)置的系統(tǒng)代理,同樣通過上述自定義廣播,攜帶代理數(shù)據(jù),最終發(fā)送到網(wǎng)絡(luò)庫底層。
【專利摘要】本發(fā)明公開的一種基于安卓平臺的設(shè)置代理服務(wù)器聯(lián)網(wǎng)的方法,可以單獨應(yīng)用于具體的APP(比如瀏覽器)本身或增加設(shè)置代理的API,還包括具體UI界面的設(shè)置,使具體APP具有設(shè)置代理的功能,將APP本身通過的代理與系統(tǒng)代理分離開來,給予用戶更多的選擇,操作更加人性化,大大提高了用戶體驗。
【IPC分類】H04L29/08
【公開號】CN105306550
【申請?zhí)枴緾N201510630660
【發(fā)明人】顧懷建
【申請人】誠邁科技(南京)股份有限公司
【公開日】2016年2月3日
【申請日】2015年9月29日