Quindi sto provando a scrivere un file dal dispositivo Android alla cartella condivisa di Windows. Sto usando l'ultima versione di JCIFS e code which displays available network shares funziona bene. Quindi presumo tutto è ok con JCIFS e con la mia LAN, WiFi ecc Ecco il codice per il caricamento di file (in realtà voglio solo scrivere uno Sring testo in un file):Scrivi/carica un file usando il problema Samba/JCIFS (SmbAuthException: Accesso negato)
public boolean save2Samba(String text, String fileName) {
try {
// My Windows shares doesn't require any login/password
// String name="login";//my windows username
// String password="password1";//my windows password
// sSambaFolder contains a path like MYPC/E/SharedFolderName/
String url = "smb://" + sSambaFolder.toLowerCase()+fileName;
SmbFile file = null;
try {
// assume ANONYMOUS is my case but there is no description of this in JCIFS API
NtlmPasswordAuthentication auth = NtlmPasswordAuthentication.ANONYMOUS;
file = new SmbFile(url, auth);
android.util.Log.i("TestApp",url);
// output is like smb://mypc/e/sharedfoldername/file.txt;
SmbFileOutputStream out = new SmbFileOutputStream(file);
out.write(text.getBytes());
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
Dal momento che l'url è connesso Sono sicuro che sia corretto (ho anche controllato l'url usando il codice che ho menzionato sopra e sfoglia il contenuto della cartella).
Ma il problema è Im ottenendo sempre lo stesso:
W/System.err(3214): jcifs.smb.SmbAuthException: Access is denied.
Azioni non sono protetti da password, quindi non hanno bisogno di alcun username/password per accedere. Potrei leggere/scrivere/cancellare file da un altro WinPC e non è richiesta alcuna autorizzazione. Inoltre ho provato a creare una password per l'utente su WinPC con le condivisioni ma il risultato era lo stesso. Così ho provato diverse versioni di NtlmPasswordAuthentication senza fortuna:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(":");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator:"); //actual username on WinPC with shares
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"Administrator","");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"","");
Così che cosa sto facendo di sbagliato e come achive il mio obiettivo quando non c'è autenticazione è necessario per ottenere l'accesso alla cartella condivisa?
BTW mio Samsung TV che è basato su Linux e usa client samba sta accedendo alla stessa cartella condivisa senza problemi e riproduce MP3 da lì (beh, sì, legge solo). Dal momento che il mio dispositivo AOS accede alla mia LAN tramite Wi-Fi (anziché la TV che è collegata via Ethernet) ho anche controllato l'accesso alla cartella condivisa usando notebook + WiFi e non ho riscontrato problemi.
Aggiunto:
sto cercando ora di eseguire le righe seguenti:
file = new SmbFile(url, auth);
android.util.Log.i("save2Samba", "file.exists(): " + file.exists());
e ottenere lo stesso accesso negato. Non sto nemmeno cercando di scrivere il file ...
È necessario abilitare l'account guest su Windows prima che funzioni. –
Nel mio caso era WinXP e non hai bisogno di un account guest per essere attivo perché funzioni (l'ho verificato due volte adesso). Per quanto riguarda Win7 è probabilmente così. Win7 è diventato molto difficile da sintonizzare se si parla di networking e questo è il motivo principale per cui non mi piace confrontarlo con XP. – Stan