1

我的 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 卡后,使用下面的代码,我得到了 AT THE SAME TIME,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/...
4

1 回答 1

0

杰夫夏基写道

好消息!在 KitKat 中,现在有一个公共 API 用于与这些辅助共享存储设备进行交互。

新的Context.getExternalFilesDirs()Context.getExternalCacheDirs()方法可以返回多个路径,包括主设备和辅助设备。然后,您可以遍历它们并检查Environment.getStorageState()File.getFreeSpace()确定存储文件的最佳位置。ContextCompat这些方法在 support-v4 库中也可用。

另请注意,如果您只对使用返回的目录感兴趣,则Context不再需要READ_orWRITE_EXTERNAL_STORAGE权限。展望未来,您将始终拥有对这些目录的读/写访问权限,而无需其他权限。

应用程序还可以通过终止其权限请求来继续在旧设备上工作,如下所示:

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />
于 2015-12-04T17:12:11.487 回答