有一个应用程序,我将.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'");
有什么想法吗?
谢谢,
保
答案 0 :(得分:1)
有一个应用程序,我将.png图像存储在应用程序的缓存目录中,当我通过消息传递等共享这些文件时,我需要让所有人暂时读取文件(即chmod 755)。
不要将它们放在缓存目录中。使用openFileOutput()
并设置MODE_WORLD_READABLE
。
正如另一个线程所示,我正在运行Runtime.getRuntime.exec()来执行此操作:
无论谁暗示你是个白痴。没有Android应用程序应该使用exec()
。没有命令行二进制文件是SDK的一部分,您可以依赖它。
<强>更新强>
在related android-developers thread中,Dianne Hackborn(@hackbod)写道:
建议的方法是编写内容提供程序,其他应用程序可以调用ContentResolver.openFileDescriptor()等。实际上编写这样的内容提供程序非常容易 - 它不需要数据库或任何事情,只是为了实现ContentProvider.openFile()。
我所看到的每一种使用MODE_WORLD_ *的情况都会导致比编写内容提供商更多的麻烦。我很遗憾这样做了。
答案 1 :(得分:0)
exec()解决方案在开发过程中运行良好,您希望能够访问应用程序的数据,但又不想使用手机。我同意它不应该在生产代码中使用,但它确实为我节省了很多时间来启动模拟器以获取我的数据库。