运行 来自 android 的 stat 命令时权限被拒绝
Permission denied when running stat command from android
大家好,我有以下代码来检查 Android
中的文件统计信息
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("stat -c \"%x\" "+file.getAbsolutePath());
proc.waitFor();
int exitvalue=proc.exitValue();
当我在 Huawei MT7-L09 运行ning Android 4.4.2 上 运行 这个时,它给了我权限被拒绝的错误,即使这在我的清单中
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
相同的代码也在 HTC One_m8 运行ning android 6.0 上 运行,但是我没有得到权限被拒绝的错误,可以谁能告诉我这是怎么回事?
我们可以使用 Os.stat - 因为 api 21,它 returns StructStat 包含字段 st_atime 和上次访问时间(以秒为单位)。
example: if (Build.VERSION.SDK_INT >= 21) { try { StructStat stat = Os.stat("/path/to/my/file"); if (stat.st_atime != 0) { // stat.st_atime contains last access time, seconds since epoch } } catch (Exception e) { // deal with exception } }
--------> 其他解决方案是执行 shell 命令 stat :
Process p = Runtime.getRuntime().exec("stat -c \"%X\" /path/to/file"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader( p.getInputStream())); String line = reader.readLine(); long time_sec = 0; if (!TextUtils.isEmpty()) time_sec = Long.parseLong(line);
------>第三种方法是使用 NDK 并从 C 或 C++ 调用 stat 函数。
大家好,我有以下代码来检查 Android
中的文件统计信息Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("stat -c \"%x\" "+file.getAbsolutePath());
proc.waitFor();
int exitvalue=proc.exitValue();
当我在 Huawei MT7-L09 运行ning Android 4.4.2 上 运行 这个时,它给了我权限被拒绝的错误,即使这在我的清单中
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
相同的代码也在 HTC One_m8 运行ning android 6.0 上 运行,但是我没有得到权限被拒绝的错误,可以谁能告诉我这是怎么回事?
我们可以使用 Os.stat - 因为 api 21,它 returns StructStat 包含字段 st_atime 和上次访问时间(以秒为单位)。
example: if (Build.VERSION.SDK_INT >= 21) { try { StructStat stat = Os.stat("/path/to/my/file"); if (stat.st_atime != 0) { // stat.st_atime contains last access time, seconds since epoch } } catch (Exception e) { // deal with exception } }
--------> 其他解决方案是执行 shell 命令 stat :
Process p = Runtime.getRuntime().exec("stat -c \"%X\" /path/to/file"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader( p.getInputStream())); String line = reader.readLine(); long time_sec = 0; if (!TextUtils.isEmpty()) time_sec = Long.parseLong(line);
------>第三种方法是使用 NDK 并从 C 或 C++ 调用 stat 函数。