我的 Android 应用需要存储 15 GB 的数据,因此需要使用可移动存储。所以我需要检查在我的应用程序加载时 fsck 是否正在运行(如果是这种情况,请退出)。我当然可以做一个
Runtime.getRuntime().exec("ps");
但我读到这个解决方案不可靠...所以我尝试了
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningAppProcessInfo tasks : manager.getRunningAppProcesses()) {
System.out.println(" ########## " + tasks.processName + " #######");
}
但我没有看到任何fsck
.实际上,使用ps
我认为它被执行为
/system/bin/fsck.exfat -R -f /dev/...
使用Runtime.getRuntime().exec("ps")
的唯一方法吗?
谢谢!
L.
编辑
命令Environment.getExternalStorageState()
对我不起作用。卸载/安装SD卡后,使用以下代码,我同时得到MOUNTED
和/system/bin/fsck.exfat -R -f /dev/...
String line;
BufferedReader br;
try {
br = new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec("ps").getInputStream()));
while ((line = br.readLine()) != null) {
if (line.contains("/fsck"))
System.out.println("### PS:" + Environment.getExternalStorageState() + " ### " +line);
} catch (IOException e1) {
e1.printStackTrace();
}
这是我得到的输出:
PS:mounted ### root [...] D /system/bin/fsck.exfat /dev/...
Jeff Sharkey写道:
好消息! 在KitKat中,现在有一个公共API,用于与这些辅助共享存储设备进行交互。
新的
Context.getExternalFilesDirs()
和Context.getExternalCacheDirs()
方法可以返回多个路径,包括主设备和辅助设备。 然后,您可以循环访问它们并检查Environment.getStorageState()
和File.getFreeSpace()
以确定存储文件的最佳位置。 这些方法也可在 support-v4 库中的ContextCompat
上使用。另请注意,如果您只对使用
Context
返回的目录感兴趣,则不再需要READ_
或WRITE_EXTERNAL_STORAGE
权限。 今后,您将始终拥有对这些目录的读/写访问权限,无需其他权限。应用还可以通过终止其权限请求来继续在较旧的设备上工作,如下所示:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />