2016-09-12 2 views
0

Эй, ребята у меня есть следующий код, чтобы инспектировать статистику файлов в AndroidДоступ запрещен при выполнении команды стат от андроида

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

Когда я бегу это на Huawei MT7-L09 работает andoird 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 работает на Android 6.0, но я не получаю разрешение отказано ошибку там, может кто-нибудь сказать мне, что происходит ?

+0

Не требуется, чтобы устройство имело 'stat', и не требуется, чтобы производитель устройства разрешал' stat' выполнять произвольные пути. Помимо этого, что такое значение 'file'? – CommonsWare

+0

Файл @CommonsWare - это файл, который я загрузил, перейдя через внешнее хранилище устройства, это файл с расширением mp3, который пытается создать инструмент, который регистрирует время доступа к mp3-файлам. – gedo

ответ

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 } } 

-------> Другое решение выполнить команду оболочки стат:

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++.

Смежные вопросы