【发布时间】:2013-06-05 07:39:54
【问题描述】:
我正在寻找一种以编程方式挂载 Samaba 共享的方法。
我知道this question,如果它有效,将允许在我的应用程序内浏览 Samba 共享,但我希望这些共享在安装后可供其他应用程序使用。
我知道 ES 文件资源管理器可以做到这一点,所以它必须可以在代码中实现,但我正在尝试弄清楚它是如何完成的。我能想到的唯一方法是使用 Runtime.getRuntime().exec(...) 打开一个进程,但接下来是发送什么命令的问题。我一直在玩终端仿真器应用程序,标准安装命令似乎不起作用。我尝试了以下方法:
mount -t smbfs //[ipaddress] /mnt/sdcard/net/Share1
和
mount -t cifs //[ipaddress] /mnt/sdcard/net/Share1
但在这两种情况下,我都会收到信息量不大的错误消息“mount: no such device”
我哪里出错了?
【问题讨论】:
-
我会使用 JCIF(我以前用过,它有效)并运行
Service。 -
真正的问题是,要使用
mount挂载文件系统,您需要通过适当的模块在内核中支持 CIFS。 -
Ken,运行服务不是一种选择。我需要这些文件对其他不知道我的应用程序透明可用。本质上,一旦挂载完成,任何 android 应用程序中的任何文件浏览器都应该能够访问远程文件
-
CifsManager 管理它,虽然它需要 root 访问权限。
-
mount要求 a) 向内核注册的文件系统(或使用 FUSE)和 b) root 访问权限(并非严格如此,可以以普通用户可以使用的方式限制挂载它,但 Android 不这样做)。使用cat /proc/filesystems查找内核识别的文件系统。如果走那条路,你仍然需要root。我怀疑其他应用程序的工作方式是通过复制到外部存储并将其他应用程序指向它,或者通过使用流式 ContentProvider(非常非常难以实现,尤其是使用 samba)。