【发布时间】:2013-09-19 23:29:53
【问题描述】:
我的 Android 应用需要存储 15 GB 的数据,所以它需要使用 removable storage。所以我需要在我的应用程序加载时检查 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/...
【问题讨论】:
-
为什么你需要知道这个?如果您担心外部存储状态不佳,可以查看
Environment.getExternalStorageState()。 -
@kcoppock:仅仅因为你错了。
Environment.getExternalStorageState()确实 NOT 返回许多设备中的外部存储,但返回内部存储器(即使插槽中没有任何 SD 卡,三星 Galaxys 总是返回MOUNTED)。文档明确警告这一点。这被称为解决方案的次数令人惊讶...... -
“仅仅因为你错了”——不,他不是。请阅读the documentation。如果您担心
Environment.getExternalStorageState()之外的其他内容,那么您关注的是外部存储之外的其他内容。所有关于其他数据存储的行为的赌注都没有了,如果你担心fsck,那将是一个巨大的霓虹灯信号,表明你的工作水平远远超出了Android SDK开发人员的水平应该做的。 -
"那么:如何强制 ExternalStorageState() 查找 SD 卡(或任何我想要的)状态? ——你不能。有官方的外部存储,就是这样。除此之外的任何内容(如果存在)均不受支持。引用文档:“使用内部存储分区作为外部存储的设备也可能提供 SD 卡插槽。在这种情况下,SD 卡不是外部存储的一部分,您的应用程序无法访问它(额外的存储空间仅用于系统扫描的用户提供的媒体)。”
-
如果应用程序在 SD 卡未准备就绪时打开会怎样?如果抛出异常,为什么不在启动过程中捕获异常并决定是否继续?
标签: android runtime activity-manager fsck