簡體   English   中英

Android 顯示來自 Inputstream 閱讀器的 output 和 Procees 返回退出代碼 1

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM