![](/img/trans.png)
[英]when i used inputstream reader i can't exit from the while loop after reading the data from the buffered reader
[英]Android show no output from Inputstream reader and Procees return exit code 1
我正在嘗試運行一個進程並從 InputStreamReader 讀取它的數據,但它以一種奇怪的方式失敗。
可執行文件是“ip neigh show”
當嘗試通過 adb shell 從連接的設備運行命令時,該命令執行正常並且也正確顯示數據。
但是,當嘗試從 kotlin 代碼執行它時,它以退出代碼 1 退出,並且 InputStreamReader 也顯示空數據。
這就是我嘗試的方式:
val p = Runtime.getRuntime().exec("ip neigh show")
InputStreamReader(p!!.inputStream).forEachLine fori@{ line ->
val teDhenat = line.split("\\s+".toRegex())
if (teDhenat[0] == ip) {
if (teDhenat.size < 4) {
return@fori
} else {
uGjet = true
macAddress = teDhenat[4]
return@fori
}
}
}
問題似乎發生在該行: val p = Runtime.getRuntime().exec("ip neigh show")
但我不明白為什么。
還嘗試了val p = Runtime.getRuntime().exec("/system/bin/ip neigh show")
,它仍然是一樣的。
我也嘗試過使用ProcessBuilder()
並且它也不起作用。
編譯和目標 SDK 是 31 手機是小米運行 Android 11 (SDK 30)
PS:我也對其他可執行文件使用相同的邏輯,它們工作得很好,比如“ping”、“top”等......
自 Android 11 (SDK 30) 起:
此外,非特權應用無法訪問設備的 MAC 地址; 只有具有 IP 地址的網絡接口可見。 這會影響 getifaddrs() 和 NetworkInterface.getHardwareAddress() 方法,以及發送 RTM_GETLINK Netlink 消息。
以下是應用程序受此更改影響的方式列表:
NetworkInterface.getHardwareAddress() 為每個接口返回 null。
應用程序無法在 NETLINK_ROUTE sockets 上使用 bind() function。
ip 命令不返回有關接口的信息。
應用無法發送 RTM_GETLINK 消息。 請注意,大多數開發人員應該使用 ConnectivityManager 的高級 API,而不是 NetworkInterface、getifaddrs() 或 Netlink sockets 等低級 API。 例如,需要有關當前路由的最新信息的應用程序可以通過使用 ConnectivityManager.registerNetworkCallback() 偵聽網絡更改並調用網絡的關聯 LinkProperties.getRoutes() 來獲取此信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.