Android判斷當前裝置是否設定了代理
主要是通過反射讀取wifi配置資訊,不過6.0開始不能修改代理了,會校驗許可權,只有系統應用許可權可以修改。
WifiManager manager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = manager.getConnectionInfo();
List<WifiConfiguration> configs = manager.getConfiguredNetworks();
if (configs == null) {
return false;
}
for (WifiConfiguration wifiConfiguration : configs) {
if (wifiConfiguration.SSID.equals("\"" + wifiInfo.getSSID() + "\"")
|| wifiConfiguration.SSID.equals(wifiInfo.getSSID())) {
if (Build.VERSION.SDK_INT > 20) {
try {
Method getProxyMethod = WifiConfiguration.class.getDeclaredMethod("getHttpProxy");
if (getProxyMethod != null) {
Object state = getProxyMethod.invoke(wifiConfiguration);
if (state == null)
return false;
Field actualhost = ProxyInfo.class.getDeclaredField("mHost");
actualhost.setAccessible(true);
Object actualhostStr = actualhost.get(state);
return actualhostStr != null && actualhostStr.equals(host);
}
} catch (NoSuchMethodException | IllegalAccessException
| IllegalArgumentException
| InvocationTargetException
e) {
return false;
} catch (NoSuchFieldException e) {
e.printStackTrace();
return false;
}
} else if (Build.VERSION.SDK_INT > 14) {
try {
Field linkPropertiesField = WifiConfiguration.class
.getDeclaredField("linkProperties");
linkPropertiesField.setAccessible(true);
Object linkProperties = linkPropertiesField.get(wifiConfiguration);
Class linkPropertiesClass = Class.forName("android.net.LinkProperties");
Method getProxy = linkPropertiesClass.getMethod("getHttpProxy");
Object proxyProperties = getProxy.invoke(linkProperties);
if (proxyProperties == null)
return false;
Class proxyinfo = Class.forName("android.net.ProxyProperties");
Field actualhost = proxyinfo.getDeclaredField("mHost");
actualhost.setAccessible(true);
Object actualhostStr = actualhost.get(proxyProperties);
return actualhostStr != null && actualhostStr.toString().equals(host);
} catch (NoSuchFieldException | IllegalAccessException
| IllegalArgumentException e) {
return false;
} catch (ClassNotFoundException e) {
return false;
} catch (NoSuchMethodException e) {
return false;
} catch (InvocationTargetException e) {
return false;
}
}
}
}
return false;
還有一種方法是用adb
adb shell dumpsys wifi | grep "Proxy settings: STATIC" -A 1
//如果有代理返回代理資訊,否則返回為空,結合下面的命令判斷是否是當前啟用的wifi
adb shell dumpsys netstats | grep "Active interfaces:" -A 1
相關文章
- 判斷Android 當前版本是否為debug版本Android
- JS判斷當前裝置是 PC IOS AndriodJSiOS
- JavaScript判斷當前裝置和瀏覽器型別JavaScript瀏覽器型別
- Android 微信支付 微信是否安裝判斷Android
- 直播平臺軟體開發,判斷當前時間是否在規定時間內
- 帝國CMS利用PHP判斷當前頁面是否為首頁PHP
- 用程式碼判斷當前系統是否支援某個版本的feature
- js 怎樣判斷使用者是否在瀏覽當前頁面JS
- android判斷狀態列是否可見Android
- 而井教你判斷當前Javascript執行環境是否支援async函式JavaScript函式
- 如何通過Java程式碼判斷當前的環境是否支援JRE 9Java
- vue透過自定義指令判斷當前元素是否在可視區域Vue
- js判斷裝置型別JS型別
- Android判斷企業微信是否登入:Android
- 判斷centos7是否安裝vimCentOS
- 怎樣判斷mysql是否安裝成功MySql
- 如何判斷酒店客房是否安裝了偷拍攝像頭?
- 如何在CRM和C4C中用程式碼判斷當前是否處於configuration模式模式
- Middleware 判斷當前是否手機端瀏覽器,並跳轉到手機端的介面瀏覽器
- 【質數判斷】給定兩個數,判斷這兩個數是否互質?
- Android 如何判斷螢石雲視訊是否可以播放Android
- Java程式設計:通過獲取當前時間,判斷今天星期幾Java程式設計
- html5怎麼判斷app是否安裝?HTMLAPP
- 判斷字串是否為空字串
- python 判斷是否為中文Python
- 判斷字串是否唯一字串
- 判斷URL字串是否合法字串
- python判斷是否為listPython
- 寫一個判斷裝置來源的方法
- Android 應用檢測裝置是否被rootAndroid
- 如何判斷我的網站是否成功安裝SSL網站
- 判斷一個物件是否為空物件,判斷一個物件中是否有空值物件
- 前幾天為了精準判斷物件型別,封裝一個高大上的資料型別的判斷,裝個逼物件封裝資料型別
- JS在瀏覽器中判斷當前網路狀態JS瀏覽器
- 判斷當前瀏覽器是不是微信瀏覽器瀏覽器
- JavaScript判斷字串是否為空JavaScript字串
- js判斷物件是否為空JS物件
- js判斷checkbox是否選中JS