5

Le modifiche come la ridenominazione di un file attivato da un'applicazione vengono visualizzate nell'interfaccia USB-MTP dopo il riavvio del dispositivo Android o dopo la registrazione il nuovo file al MediaScanner loro come questa (vedi Trigger mediascanner on specific path (folder), how to?):MediaScannerConnection # scanFile converte le directory in file quando le si accede con USB-MTP su Android 5 Lollipop

file.renameTo(newFile);  
MediaScannerConnection.scanFile(context, 
     new String[] { newFile.getAbsolutePath() }, null, null); 

USB-MTP viene utilizzato per accedere alla memoria di un dispositivo Android tramite USB. Per esempio. con Windows Explorer.

Tuttavia, con il Sony Xperia Tablet Z (SGP321) sotto Android 5.0.2 (Build 10.6.A.0.454) cartelle forniti in newFile diventerà un file con 4KB. Non riesco più ad accedere alla struttura delle cartelle utilizzando Windows Explorer, né posso copiare il file sul mio computer. Anche dopo il riavvio del tablet! Lo stesso dispositivo con Android 4.4.4 non mostra il comportamento. Sembra che solo la vista USB-MTP sia rotta. La struttura dei file a cui accede un'app per Android sembra ancora a posto.

Domanda: Questo comportamento è un errore o l'ho implementato in modo errato? Quale sarebbe l'implementazione corretta?

Quello che ho provato finora per risolvere il problema:

  1. mia soluzione attuale è quello di evitare scanFile per le directory.
  2. Posso convertire i file nelle directory rinominandoli con un'app per Android senza MediaScannerConnection#scanFile. Dopo il riavvio, posso accedere nuovamente alla directory con Windows Explorer.
  3. Rinominare i file con Windows Explorer che in realtà sono directory non li ripristina. Anche dopo il riavvio.
  4. Questa linea come suggerito in https://stackoverflow.com/a/21918085/433718 non aggiorna vista USB-MTP, ma anche non converte le directory in file:

    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
          Uri.fromFile(newFile.getParentFile())); 
    
  5. Forse correlati:

+2

ho finito per creare un manichino file di testo in ogni directory che volevo rendere visibile e utilizzare scanfile sul file. –

+0

Hai un'altra correzione per visualizzare la cartella dalla condivisione MTP USB? – reaper

risposta

8

ho finito per creare un file di testo fittizio in ogni directory ho voluto rendere visibile, e utilizzare SCANFILE sul file.

1) creare la directory, ma non directory "scansione"

2) copiare il file nella directory

3) SCANFILE corsa sul filePath

MediaScannerConnection.scanFile (_application, new String[] { filePath }, null, null);