В моем приложении я пытаюсь получить список подключенного устройства к Wi-Fi здесь, я могу успешно получить все устройства, но проблема в том, что весь процесс занимает много времени, чтобы выполнить здесь, когда я удаляю val reachable = address.isReachable(1000)
из моего цикла выполняется немедленно, но мне нужна эта строка кода для проверки соединения, поэтому мой вопрос заключается в том, как улучшить мой код, чтобы быстрее достичь желаемых результатов!
Любые предложения будут оценены!
Вот мой код:
for (i in 0..254)
{
val testIp = prefix + (i).toString()
val address = InetAddress.getByName(testIp)
val reachable = address.isReachable(1000)
val hostName = address.hostName.toString()
if (reachable) {
Log.i(TAG, "Host: " + (hostName) + "(" + (testIp) + ") is Connected!")
}
}
Это мой полный код для получения списка подключенных устройств:
fun sniffnetwork(){
val mContextRef:WeakReference<Context>
mContextRef = WeakReference<Context>(this)
Observable.fromCallable {
Log.d(TAG, "Let's sniff the network")
try
{
val context = mContextRef.get()
if (context != null)
{
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork = cm.getActiveNetworkInfo()
val wm = context.getApplicationContext().getSystemService(Context.WIFI_SERVICE) as WifiManager
val connectionInfo = wm.getConnectionInfo()
val ipAddress = connectionInfo.getIpAddress()
val ipString = Formatter.formatIpAddress(ipAddress)
Log.d(TAG, "activeNetwork: " + activeNetwork.toString())
wifiname = activeNetwork.extraInfo
wifiname= wifiname.replace("^\"|\"$".toRegex(), "")
tvwifiname.text = wifiname + " "+ "connected "
Log.d(TAG, "ipString: " + (ipString).toString())
val prefix = ipString.substring(0, ipString.lastIndexOf(".") + 1)
Log.d(TAG, "prefix: " + prefix)
for (i in 0..254)
{
val testIp = prefix + (i).toString()
val address = InetAddress.getByName(testIp)
val reachable = address.isReachable(200)
val hostName = address.hostName.toString()
if (reachable) {
Log.i(TAG, "Host: " + (hostName) + "(" + (testIp) + ") is Connected!")
}
}
}
else
{
Log.i("error:","Context is null")
}
}
catch (t:Throwable) {
Log.e(TAG, "Well that's not good.", t)
}
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{
}
}