2013-06-09 22 views
5

Sto cercando un modo per montare le condivisioni Samaba programmaticamente.Android - Montare una condivisione Samba nel codice

Sono a conoscenza di this question che, se funziona, permetterebbe la navigazione una condivisione Samba entro mia app, ma voglio le quote siano disponibili per altre applicazioni, una volta montati.

So che ES File Explorer può farlo, quindi deve essere possibile implementarlo nel codice, ma sto cercando di capire come è fatto. L'unico metodo che posso pensare è aprire un processo con Runtime.getRuntime(). Exec (...) ma poi c'è il problema di quali comandi inviare. Ho giocato in un'app di emulazione di terminale e il comando di mount standard non sembra funzionare. Ho provato la seguente:

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

e

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

ma in entrambi i casi sto ottenendo il messaggio di errore piuttosto uninformative "mount: No such device"

Dove potrei essere sta andando male?

+0

Vorrei utilizzare JCIF (l'ho usato prima, funziona) ed eseguire un 'Servizio'. –

+1

Il vero problema è che per montare il filesystem usando 'mount' avrete bisogno del supporto CIFS nel vostro kernel tramite i moduli appropriati. –

+0

Ken, l'esecuzione di un servizio non è un'opzione. Ho bisogno che i file siano trasparentemente disponibili per altre applicazioni che non sono a conoscenza delle mie. In sostanza, una volta completato il mount, qualsiasi file explorer in qualsiasi app Android dovrebbe essere in grado di accedere ai file remoti. – LairdPleng

risposta

4

Probabilmente smbfs/cifs non sono attualmente supportati dal kernel. Come Delyan Detto questo, garantire il kernel può montare questi file system:

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

Se non sono elencati, si dovrebbe cercare di fare un modprobing (a volte il modulo che si desidera solo essere attivato), ottenere l'accesso come root, allora:

# modprobe <modulename(without.ko)> 

es. :

# modprobe cifs 

Se non funziona, è necessario modificare o ricompilare il kernel (inclusi i moduli appropriati).

+0

Ho spiegato nella domanda e ribadito nei commenti che CifsManager funziona, senza alcuna configurazione aggiuntiva, sui dispositivi in ​​cui è necessaria questa funzionalità, ma il montaggio tramite la riga di comando non funziona. – LairdPleng

+0

L'opzione "Carica tramite insmod" è spuntata nel CifsManager impostazioni? In questo caso prova a eseguire 'busybox insmod cifs' prima di eseguire il comando mount. – EricLavault

1

Mi sono imbattuto nello stesso identico problema. Il responsabile di Cifs stava funzionando, ma il comando dal terminale non lo era. Per quanto mi riguarda, è risultato che ho dovuto modificare leggermente il comando e ha funzionato. Provate il seguente comando:

mount -o username = guest, password = ospite -t ​​cifs // [IP address]/[share]/sdcard/CIFS/nas

Assicurarsi che il locale della cartella/sdcard/cifs/nas (o l'equivalente desiderato) esiste prima di eseguire il comando o si potrebbe ottenere un errore "file o directory inesistente".