1

有一个应用程序,我将 .png 图像存储在应用程序的缓存目录中,并且当我通过消息传递等共享这些文件时,我需要让每个人都可以临时读取这些文件(即 chmod 755)。

正如另一个线程中所建议的,我正在运行 Runtime.getRuntime.exec() 来执行此操作:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png");

这很好用,并且当我过滤 / 和 \ 时,任何名称都可以使用...除了带有空格的名称,这不足为奇。这失败了:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/file name.png");

因此,来自 linux,我尝试将文件路径用引号括起来,这适用于 linux,但仍然无法更改 Android 上的文件权限:

Runtime.getRuntime().exec("setperm chmod 755 \"/path/to/file name.png\"");
or
Runtime.getRuntime().exec("setperm chmod 755 '/path/to/file name.png'");

有任何想法吗?

谢谢,

保罗

4

2 回答 2

1

有一个应用程序,我将 .png 图像存储在应用程序的缓存目录中,并且当我通过消息传递等共享这些文件时,我需要让每个人都可以临时读取这些文件(即 chmod 755)。

不要将它们放在缓存目录中。使用openFileOutput()和设置MODE_WORLD_READABLE.

正如另一个线程中所建议的,我正在运行 Runtime.getRuntime.exec() 来执行此操作:

向你建议的人是个白痴。不应使用任何 Android 应用程序exec()。没有作为 SDK 一部分的命令行二进制文件,您可以依赖它。


更新

相关的 android-developers 线程中,Dianne Hackborn (@hackbod) 写道:

推荐的方法是编写一个内容提供程序,其他应用程序可以调用它 ContentResolver.openFileDescriptor() 等。编写这样一个内容提供程序实际上很容易——它不需要数据库或任何东西,只需要实现 ContentProvider.openFile()。

我看到的每一种使用 MODE_WORLD_* 的情况都会导致比编写内容提供者更多的麻烦。我后悔做了那个。

于 2011-04-23T15:49:59.080 回答
0

exec() 解决方案在您想要访问应用程序数据但又不想 root 手机的开发过程中运行良好。我同意它不应该在生产代码中使用,但它确实为我节省了很多时间来启动模拟器来获取我的数据库。

于 2011-06-29T19:27:27.330 回答