Ich versuche einfach eine einfache XML-Datei auf die SD-Karte zu schreiben und habe festgestellt, dass mein Nexus 4 die Datei zwar schreibt, sie jedoch unter Windows 7 nicht über das MTP-Protokoll angezeigt werden kann.
Code:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType();
Serializer serializer = new Persister();
File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml");
try {
boolean created = myFile.createNewFile();
serializer.write(customerQueryRequest, myFile);
} catch (Exception e) {
e.printStackTrace();
}
}
Ich kann die Datei mit Astro File Manager auf dem Telefon selbst sehen:
aber Windows sieht es nicht ...:
adb shell
im Verzeichnis zeigt:
ls -l
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Alarms
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Android
drwxrwxr-x root sdcard_rw 2012-11-21 19:30 DCIM
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Download
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Movies
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Music
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Notifications
drwxrwxr-x root sdcard_rw 2012-11-19 12:06 Pictures
drwxrwxr-x root sdcard_rw 1970-01-16 20:51 Podcasts
drwxrwxr-x root sdcard_rw 2012-11-19 13:22 Ringtones
drwxrwxr-x root sdcard_rw 2012-11-19 14:33 bluetooth
-rw-rw-r-- root sdcard_rw 79 2012-12-05 22:26 customerQueryRequest.xml
drwxrwxr-x root sdcard_rw 2012-11-20 02:50 data
-rw-rw-r-- root sdcard_rw 11394 2012-11-19 13:54 eightpen_custom_gestures
drwxrwxr-x root sdcard_rw 2012-11-19 13:17 media
Was ist los mit meinem Nexus 4? Warum versteckt es meine Sachen vor Windows?
Antworten:
Scheint ein bekanntes Problem zu sein, das den Zugriff auf Android-USB-Dateien über MTP betrifft . Der MTP-Cache ist bis zu einem Neustart des Telefons veraltet.
Eine Problemumgehung ist:
Oder vermeiden Sie einfach die Verwendung von USB. Das Problem betrifft keine anderen Methoden für den Zugriff auf die Dateien. Versuchen Sie beispielsweise AirDroid , Dateien zu übertragen.
Hinweis: Dies funktioniert nicht für Android 5.0.2: Nach dem Löschen von "Media Storage" und der Verwendung eines SD Rescanners werden die Ordner in Windows 7 als nicht zu öffnende 4K-Dateien angezeigt. Die einzige Lösung zu diesem Zeitpunkt besteht darin, den Medienspeicher erneut zu löschen und das Gerät neu zu starten
quelle
Sie können den folgenden Code nach dem Schließen der Datei verwenden
MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null);
Quelle: https://code.google.com/p/android/issues/detail?id=38282
quelle
context.sendBroadcast()
ohne Wirkung anzurufen.Nachdem ich Stunden mit diesem Problem verbracht hatte, löste ich es folgendermaßen:
private void rescanFolder(String dest) { // Scan files only (not folders); File[] files = new File(dest).listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isFile(); } }); String[] paths = new String[files.length]; for (int co=0; co< files.length; co++) paths[co] = files[co].getAbsolutePath(); MediaScannerConnection.scanFile(activity, paths, null, null); // and now recursively scan subfolders files = new File(dest).listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isDirectory(); } }); for (int co=0; co<files.length; co++) rescanFolder(files[co].getAbsolutePath()); }
Die Sache ist, dass Sie nur Dateien scannen müssen (keine Ordner) und dann für jeden Fubfolder rekursiv wiederholen müssen
BEARBEITEN Wenn Sie nicht möchten, dass Bilder zu Ihrem Fotoalbum hinzugefügt werden (sondern nur Ihr Inhalt über das MTP-Protokoll angezeigt wird), müssen
.nomedia
Sie vor dem erneuten Scannen eine leere Datei in Ihren Ordner legen:new File(myFolder + File.separator + ".nomedia").createNewFile(); rescanFolder(myFolder);
quelle
Auf dem Xperia Z hat der folgende Code einwandfrei funktioniert:
String screenShotFile = "...."; activity.sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri .fromFile(screenShotFile)));
für 4.4+ verwenden:
activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(screenShotFile)));
(Leider erinnere ich mich nicht, ob ich es gut genug getestet habe)
http://commonsware.com/blog/2013/11/06/android-4p4-permission-regressions.html
quelle
Die beste Problemumgehung für den in der akzeptierten Antwort erwähnten Fehler besteht darin, Daten mit SSH von einem Android-Betriebssystem auf einen anderen Computer / Server (Linux, MacOS, Windows) zu kopieren.
Optional und empfohlen
Im Android-Gerät
In der Maschine
rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/
SSHelper Version 8.5 Copyright 2014, P. Lutus Default password is "admin" (recommend: change it) [email protected]'s password: admin receiving incremental file list
Die anderen Vorschläge haben bei mir nicht funktioniert:
quelle
Bekanntmachung / Speicherung / emuliert. In Android 4.2 gibt es einige funky emulierte Dinge für den App- / Benutzerzugriff, zum Beispiel eine separate / sdcard / für jeden Benutzer. Versuchen Sie, die Datei nach / sdcard / anstelle der angezeigten emulierten SD-Karte zu verschieben.
quelle
/storage/emulated/legacy
sowieso ein Link zu , der selbst ein Link ist, zu/mnt/shell/emulated/0
dem die Datei enthält.Der einfache Code, der zur Frage vorgeschlagen wurde Wie kann ich MediaStore unter Android aktualisieren? führt das erforderliche Update von MediaStore durch, wenn es aufgerufen wird, nachdem ich eine Datei in einem externen Speicher abgelegt habe. Der Inhalt meines Nexus 4 wird im Windows 7-Datei-Explorer sofort aktualisiert.
quelle
Ich musste ein Verzeichnis erstellen und einige Beispieldateien für meine App kopieren. Nach vielen Experimenten und Recherchen hat das folgende Verfahren für mich einwandfrei funktioniert:
1) Erstelltes Verzeichnis mit File.mkdir ().
2) Kopieren Sie die Dateien in das Verzeichnis und führen Sie MediaScanner für jede Datei aus.
MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null, null);
3) Führen Sie MediaScanner im Verzeichnis aus.
MediaScannerConnection.scanFile(context, new String[]{directory.getAbsolutePath()}, null, null);
Ergebnis: Die Dateien und das Verzeichnis werden sofort auf dem PC über MTP angezeigt.
quelle
Hatte ein ähnliches Problem mit meinem OneplusOne:
Nach dem Software-Update (auf 6.0.1) konnte ich meine Kamerabilder beim Anschließen an den Computer (PTP und MTP) nicht sehen. Sowohl der SDRescan als auch der SDscanner der App hatten keine Auswirkung.
Meine Lösung bestand darin, alle Bilder von DCIM mithilfe eines Terminals oder einer beliebigen Datei-Explorer-App auf dem Telefon in einen anderen Ordner zu kopieren. Beim Herstellen einer Verbindung zum Computer konnte ich die kopierten Dateien sehen. Ich habe sie auf meinen Computer verschoben und meinen Kameraordner gelöscht. Keine dauerhafte Lösung, aber es hat das Problem für mich behoben, zumindest bis ich das nächste Backup mache. = D.
quelle
Die obigen Antworten eignen sich gut zum Erstellen der Datei. Wenn Sie die Datei später löschen und möchten, dass diese Änderung auch übernommen wird, können Sie einen der folgenden Schritte ausführen: Lassen Sie uns zunächst zwei Lösungen behandeln, die anscheinend funktionieren, bei einigen Geräten jedoch Probleme verursachen. Der erste besteht darin, die gelöschte Datei zu scannen:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Dies funktioniert auf vielen Geräten für gelöschte Dateien, aber auf einigen Geräten wird tatsächlich eine neue 0-Byte-Datei erstellt, was wahrscheinlich nicht das ist, was Sie wollen. In diesem Fall können Sie Folgendes tun, wenn Sie mit <4.4 KitKat arbeiten:
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.fromFile(folder)));
Wobei Ordner gleich file.getParentFile () ist. Unter KitKat 4.4 und höher wird leider eine SecurityException ausgelöst. Bei diesen Geräten können Sie versuchen, sie direkt aus dem Media Store zu löschen:
final Uri externalFilesUri = Files.getContentUri("external"); context.getContentResolver().delete(externalFilesUri, Files.FileColumns.DATA + "=?", new String[] {file.getAbsolutePath()});
Ich habe dieses Programm als Problemumgehung für ACTION_MEDIA_MOUNTED getestet, das nicht mit KitKat funktioniert, und es funktioniert in meinen Tests auf dem Nexus 5.
quelle
Vor kurzem hatte ich das gleiche Problem, aber einige zusätzliche Nachforschungen haben geholfen, versteckte Dateien zu finden. Es scheint, dass Google einige Änderungen an der Speicherstruktur vorgenommen hat. Alle diese Dateien wurden in einen anderen Ordner verschoben
This Computer\HTC One\Internal Storage\storage\emulated\0
. Aber es ist seltsam, dass nicht alle Dateien verschoben wurden.Android 4.4.2
quelle
In der Dokumentation hier müssen Sie MediaScannerConnection.scanFile aufrufen:
// Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } });
quelle