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
相關文章
- JS判斷當前裝置是 PC IOS AndriodJSiOS
- Android 程式設計下判斷當前裝置是手機還是平板Android程式設計
- 判斷Android 當前版本是否為debug版本Android
- Android 判斷當前的介面是否是桌面的方法Android
- JavaScript判斷當前裝置和瀏覽器型別JavaScript瀏覽器型別
- 判斷ios裝置中是否安裝了某款應用iOS
- Android 用ping的方法判斷當前網路是否可用Android
- 舒服的判斷當前應用是否處於前臺
- 判斷裝置是否是 iphone5iPhone
- Android檢測網路狀態,判斷當前網路是否可用Android
- javascript如何判斷當前瀏覽器是否支援cookieJavaScript瀏覽器Cookie
- Python判斷當前使用者是否是rootPython
- Android 判斷當前系統語言Android
- PHP判斷使用者裝置是否是移動裝置PHP
- Android判斷裝置是否開啟WIFI、GPRS資料連線AndroidWiFi
- 如何判斷當前瀏覽器是否支援html5瀏覽器HTML
- 判斷當前viewcontroller是否是某個特定類ViewController
- 在Linux下判斷系統當前是否開啟了超執行緒Linux執行緒
- android判斷當前系統的語言Android
- Android 微信支付 微信是否安裝判斷Android
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- Android判斷當前棧頂Activity的包名Android
- 判斷 iOS 裝置iOS
- js如何判斷當前瀏覽器是否是谷歌瀏覽器JS瀏覽器谷歌
- 帝國CMS利用PHP判斷當前頁面是否為首頁PHP
- 【Android】使用ConnectivityManager與NetworkInfo實現判斷當前網路環境是否可用Android
- 直播平臺軟體開發,判斷當前時間是否在規定時間內
- 使用JavaScript判斷使用者是否為手機裝置JavaScript
- 判斷當前程式是否正在執行
- 判斷當前使用者是否為系統管理員的例項
- js 怎樣判斷使用者是否在瀏覽當前頁面JS
- 判斷當前應用程式處於前臺還是後臺 ANDROIDAndroid
- 判斷是否是移動裝置訪問網站程式碼網站
- Android 判斷網路是否正常Android
- android判斷手機是否rootAndroid
- 判斷checkbox是否已經勾選設定按鈕是否可用
- 而井教你判斷當前Javascript執行環境是否支援async函式JavaScript函式
- 用程式碼判斷當前系統是否支援某個版本的feature