执行命令时出错:权限被拒绝

时间:2018-01-24 08:25:46

标签: android process permissions

我有一个名为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"/>

该应用程序已授予写入权限。

2 个答案:

答案 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。