我有一个名为iperf的可执行文件来测量网络速度。可执行文件是一种资产,我以编程方式复制到我的应用程序文件目录。之后,我使用777权限对此可执行文件执行chmod命令,其中包含:
val processChmod = Runtime.getRuntime().exec("/system/bin/chmod 777 ${getExternalFilesDir(null)}/iperf3")
processChmod.waitFor()
命令以退出代码0结束。
然后,我用:
调用这个可执行文件ProcessBuilder().command(command).redirectErrorStream(true).start()
我明白了:
Cannot run program
"/storage/emulated/0/Android/data/my.packpage.name/files/iperf3":
error=13, Permission denied
我不知道如何在我的app文件夹中执行此命令。我的清单中也有写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
该应用程序已授予写入权限。
答案 0 :(得分:0)
如果您打算测量网络速度,则可以使用Connectivity Manager轻松完成。
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
int downSpeed = nc.getLinkDownstreamBandwidthKbps();
int upSpeed = nc.getLinkUpstreamBandwidthKbps();
答案 1 :(得分:0)
如果权限被拒绝,则需要对exec()进行root访问。请改用NetworkCapabilities。