2012-11-22 3 views
27

Sto tentando di salvare le immagini in una sottocartella in Android. Ecco un po 'del mio codice:Cartella aggiunta in Android non visibile tramite USB

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
path = new File(path, "SubDirName"); 
path.mkdirs(); 

(ho provato getExternalStorageDirectory invece di getExternalStoragePublicDirectory e la cartella Immagini al posto di DCIM.)

Il fatto è che ogni sottocartella aggiungo, inclusi i suoi contenuti, don essere visualizzati in Windows Explorer quando il dispositivo è connesso tramite USB. Tuttavia, viene mostrato nel gestore di file Android.

Ho provato a trasmettere l'intento ACTION_MEDIA_MOUNTED sul padre della nuova directory. Non ha funzionato.

Se aggiungo un file in Windows, viene visualizzato su Android. Se aggiungo un file su Android tramite File Manager, viene visualizzato in Windows. Se aggiungo il file a livello di codice, viene visualizzato su Gestione file Android ma non su Esplora risorse. E io ho bisogno di per scaricarlo da Windows e non voglio che l'utente finale debba creare manualmente la cartella.

Cosa sto sbagliando?

+2

Ho anche visto questo comportamento nei dispositivi Samsung. Non ci sono problemi nel tuo codice. È il comportamento dei driver USB Samsung. Plugout e Plugin USB di nuovo, la directory inizierà a mostrare. –

+1

Grazie per il consiglio, PC. Ci ho pensato anch'io. Questo è un trasformatore ASUS, però. Ho provato a collegare e tornare e non ha funzionato. – eje211

+1

se le cartelle sono visibili in Gestione file Android, quindi secondo me il problema è l'USB e non il problema del codice. –

risposta

44

Anche l'argomento sembra essere vecchio. Ho affrontato lo stesso problema e il riavvio del dispositivo Android o del PC non è una soluzione pratica per gli utenti. :) Questo problema è attraverso l'uso del protocollo MTP (odio questo protocollo). Quello che devi fare è quello di avviare una nuova scansione dei file disponibili e si può fare questo utilizzando la classe MediaScannerConnection:

// snippet taken from question 
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
path = new File(path, "SubDirName"); 
path.mkdirs(); 

// initiate media scan and put the new things into the path array to 
// make the scanner aware of the location and the files you want to see 
MediaScannerConnection.scanFile(this, new String[] {path.toString()}, null, null); 
+6

Grazie mille, questo è un buon risultato ... ho voglia di uccidere Google per questo. Questo dovrebbe essere fatto automaticamente ogni volta che qualcosa viene scritto sul disco. Spero che questo sia risolto presto da Google –

+0

Sul mio computer Windows 7, funziona solo a volte .... –

+1

Grazie per l'idea di scansione dei file. –

0

se si aggiunge la cartella alla scheda SD dal PC direttamente alla scheda tramite il lettore di schede che non verrà visualizzata in Windows Explorer quando è collegata al telefono, la soluzione è copiare o spostare la stessa cartella utilizzando il programma di gestione file Android e quindi verrà elencato nell'indice della scheda SD quando connesso al PC.

2

In questo modo non funzionano a volte per me. Bene ecco la soluzione completa.

// snippet taken from question 
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
path = new File(path, "SubDirName"); 
path.mkdirs(); 

// fix 
path.setExecutable(true); 
path.setReadable(true); 
path.setWritable(true); 

// initiate media scan and put the new things into the path array to 
// make the scanner aware of the location and the files you want to see 
MediaScannerConnection.scanFile(this, new String[] {path.toString()}, null, null); 
+1

Solo un piccolo commento: invece di dire _Questo modo non funziona a volte per me_ si potrebbe dire _ [La soluzione proposta da Baschi] (http : //stackoverflow.com/a/19934089/4453460) non funziona a volte invece per me_ (solo per essere più chiaro). – lfurini

-1

ho risolto questo problema a ginocchiera l'impostazione telefono:

1) Dopo Dir creato e/o in modalità file salvato, Chang dalla modalità (MTP) per USB (SD Card) per un momento, attendere il montaggio della scheda SD sul pc, quindi verrà mostrato il file Dir &.

2) Torna nuovamente alla modalità (MTP) in cui è ancora visibile l'ultimo file.

3) quando si ri-salva un file è necessario passare nuovamente alla USB per vederlo.

3

L'unica cosa che ha funzionato per me è questo:

Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
Uri fileContentUri = Uri.fromFile(path); 
mediaScannerIntent.setData(fileContentUri); 
this.sendBroadcast(mediaScannerIntent); 

credito al https://stackoverflow.com/a/12821924/1964666

-1

basta creare la dir sul pc prima poi copiarlo verso la scheda di memoria SD/telefono.

è possibile inserire i contenuti nella cartella e copiare prima o solo la cartella. Finché la cartella viene creata dal pc, qualsiasi contenuto può essere semplicemente copiato direttamente su dispositivi mobili interni/esterni. per i contenuti compressi non possono essere decompressi e copiati direttamente, sfortunatamente, è necessario prima decomprimerli.

buona fortuna e buona giornata! :)