Zmiany, takie jak zmiana nazwy pliku wywołanego przez aplikację, pojawiają się tylko w interfejsie USB-MTP po ponownym uruchomieniu urządzenia z systemem Android lub po rejestracji nowy plik na MediaScanner nich jak ten (patrz Trigger mediascanner on specific path (folder), how to?):MediaScannerConnection # scanFile konwertuje katalogi do plików podczas uzyskiwania dostępu do nich przez USB-MTP na Androidzie 5 Lollipop
file.renameTo(newFile);
MediaScannerConnection.scanFile(context,
new String[] { newFile.getAbsolutePath() }, null, null);
USB MTP służy do uzyskania dostępu do przechowywania android urządzenia za pośrednictwem portu USB. Na przykład. z Eksploratorem Windows.
Jednak z Sony Xperia Tablet Z (SGP321) pod Androida 5.0.2 (Build 10.6.A.0.454) Teczki dostarczane w newFile
staną się plik z 4KB. Nie jestem już w stanie uzyskać dostępu do struktury folderów przy użyciu Eksploratora Windows, ani też nie mogę skopiować pliku na mój komputer. Nawet po ponownym uruchomieniu tabletu! To samo urządzenie z Androidem 4.4.4 nie pokazuje tego zachowania. Wygląda na to, że tylko widok USB-MTP jest uszkodzony. Struktura plików dostępna przez aplikację dla systemu Android nadal wygląda dobrze.
Pytanie: Czy to zachowanie jest błędem, czy też zaimplementowałem je niepoprawnie? Jaka byłaby właściwa implementacja?
Co Próbowałem tak daleko, aby rozwiązać ten problem:
- Moje bieżące obejście jest uniknięcie
scanFile
dla katalogów. - Mogę konwertować pliki z powrotem do katalogów, zmieniając ich nazwę za pomocą aplikacji na Androida bez numeru
MediaScannerConnection#scanFile
. Po ponownym uruchomieniu komputera mogę ponownie uzyskać dostęp do katalogu w Eksploratorze Windows. - Zmiana nazw plików za pomocą Eksploratora Windows, które faktycznie są katalogami, nie powoduje ich przywrócenia. Nawet po restarcie.
Linia ta, jak sugerowano w https://stackoverflow.com/a/21918085/433718 nie odświeżyć widok USB MTP, ale również nie konwertować galerii katalogi do plików:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(newFile.getParentFile()));
Może powiązane:
- https://stackoverflow.com/a/27321544/433718
- Korzystanie z funkcji rozpoznawania zawartości dla wszystkich rodzajów operacji na plikach, takich jak usuwanie pliku w tej odpowiedzi: Android Deleting Files MediaScannerConnection
skończyło się tworząc manekina plik tekstowy w każdym katalogu, który chciałem uczynić widocznym, i użyj pliku scanFile na pliku. –
Czy masz kolejną poprawkę, aby pokazać folder z udziału MTP usb? – reaper