从android运行stat命令时权限被拒绝

时间:2016-09-12 10:40:19

标签: android storage permission-denied stat

嘿伙计们,我有以下代码来检查Android中的文件统计信息

     Runtime runtime = Runtime.getRuntime();
     Process proc = runtime.exec("stat -c \"%x\" "+file.getAbsolutePath());
     proc.waitFor();
     int exitvalue=proc.exitValue();

当我在华为MT7-L09上运行此版本并且运行版本为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" />

同样的代码也在运行android 6.0的HTC One_m8上运行,但我没有在那里得到权限被拒绝的错误,有人能告诉我发生了什么吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用Os.stat - 从api 21开始,它返回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 } }

-------&GT;其他解决方案是执行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);

------&gt;第三个方法是使用NDK并从C或C ++调用stat函数。