2013-06-09 9 views
5

Ich bin auf der Suche nach einer Möglichkeit, Samaba Aktien programmatisch zu montieren.Android - Mount eine Samba-Freigabe in Code

Ich bin mir dessen bewusst this question die, wenn es funktioniert, erlauben würde, eine Samba-Freigabe Surfen innerhalb meine app, aber ich möchte, dass die Aktien an andere Anwendungen einmal montiert zur Verfügung stehen.

Ich weiß ES File Explorer kann dies tun, so muss es möglich sein, in Code zu implementieren, aber ich versuche herauszufinden, wie es gemacht wird. Die einzige Methode, die ich mir vorstellen kann, ist das Öffnen eines Prozesses mit Runtime.getRuntime() .exec (...), aber dann gibt es das Problem, welche Befehle gesendet werden sollen. Ich habe in einer Terminal-Emulator-App gespielt und der Standard-Mount-Befehl scheint nicht zu funktionieren. Ich habe das versucht, folgende:

mount -t smbfs //[ipaddress] /mnt/sdcard/net/Share1 

und

mount -t cifs //[ipaddress] /mnt/sdcard/net/Share1 

aber in beiden Fällen Ich erhalte die eher uninformativ Fehlermeldung "mount: no such device"

Wo könnte ich sein falsch machen?

+0

Ich würde JCIFs verwenden (ich habe es vorher verwendet, es funktioniert) und einen 'Service' ausführen. –

+1

Das eigentliche Problem besteht darin, dass Sie das Dateisystem mit 'mount' mounten müssen, um CIFS-Unterstützung in Ihrem Kernel über die entsprechenden Module zu erhalten. –

+0

Ken, einen Dienst zu betreiben, ist keine Option. Ich brauche die Dateien für andere Anwendungen transparent, die mir nicht bekannt sind. Im Wesentlichen, sobald die Bereitstellung abgeschlossen ist, sollte jeder Datei-Explorer in jeder Android-App in der Lage sein, auf die Remote-Dateien – LairdPleng

Antwort

4

Wahrscheinlich werden smbfs/cifs derzeit nicht von Ihrem Kernel unterstützt. Wie Delyan sagte, sicherzustellen, dass Ihr Kernel dieses Dateisystem mounten kann:

$ cat /proc/filesystems 
nodev sysfs 
nodev rootfs 
nodev bdev 
nodev proc 
nodev cgroup 
nodev tmpfs 
nodev debugfs 
nodev sockfs 
nodev usbfs 
.... 

Wenn sie nicht aufgeführt sind, sollen Sie versuchen, eine modprobing zu tun (manchmal das Modul einfach aktiviert werden müssen wollen), Root-Zugriff erhalten dann:

# modprobe <modulename(without.ko)> 

z :

Wenn es nicht funktioniert, müssen Sie Ihren Kernel (einschließlich der entsprechenden Module) ändern oder neu kompilieren.

+0

Ich habe In der Frage erklärt und in den Kommentaren wiederholt, dass CifsManager ohne zusätzliche Konfiguration auf den Geräten funktioniert, auf denen diese Funktionalität benötigt wird, jedoch funktioniert das Mounten über die Kommandozeile nicht – LairdPleng

+0

Ist im CifsManager die Option "Laden über insmod" aktiviert? Einstellungen? In diesem Fall versuchen Sie 'busybox insmod cifs' auszuführen, bevor Sie den Befehl mount ausführen. – EricLavault

1

Ich lief genau das gleiche Problem. Cifs Manager arbeitete, aber der Befehl vom Terminal war nicht. Für mich stellte sich heraus, dass ich den Befehl nur leicht modifizieren musste und es funktionierte. Versuchen Sie, den folgenden Befehl ein:

mount -o username = Gast, Passwort = guest -t cifs // [IP-Adresse]/[share]/sdcard/CIFS/nas

Stellen Sie sicher, dass das lokale Verzeichnis/sdcard/cifs/nas (oder Ihre gewünschte Entsprechung) existiert vor dem Ausführen des Befehls oder Sie erhalten möglicherweise einen Fehler "Datei oder Verzeichnis existiert nicht".