Getting WiFi proxy settings in Android

前端 未结 4 1118
天涯浪人
天涯浪人 2020-12-08 06:00

I am trying to read WIFI proxy settings

  • Proxy host
  • Proxy port
  • Proxy user (authentication)
  • Proxy password (authentication)
4条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-08 06:11

    private fun getUserProxy(context: Context): Data {
        return try {
            val declaredField = WifiConfiguration::class.java.getDeclaredField("mIpConfiguration")
            declaredField.isAccessible = true
    
            val data =
                (context.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager)
                    ?.configuredNetworks
                    ?.asSequence()
                    ?.mapNotNull {
                        try {
                            declaredField.get(it)
                        } catch (e: Exception) {
                            e.printStackTrace()
                            null
                        }
                    }
                    ?.mapNotNull {
                        try {
                            (it.javaClass.getDeclaredField("httpProxy").get(it) as? ProxyInfo)
                        } catch (e: Exception) {
                            e.printStackTrace()
                            null
                        }
                    }
                    ?.find { !it.host.isNullOrEmpty() }
                    ?.let { Data(it.host ?: "", it.port.toString()) }
                    ?: Data()
    
            declaredField.isAccessible = false
            return data
        } catch (e: Exception) {
            e.printStackTrace()
            Data()
        }
    }
    
    data class Data(
        val host: String = "",
        val port: String = ""
    )
    

提交回复
热议问题