2016-11-11 4 views
2

Ich habe eine Anwendung, die auf Standardgeräten mit External storage Partition oder integrierte/externe SD-Karte funktioniert. Aber kürzlich habe ich zum Testen auf ein Acer-Tablet umgestellt, und alle Dateioperationen sind damit kaputt.Ich kann nicht auf öffentliche Ordner im internen Speicher zugreifen

Das Tablet hat nur Internal storage, auf dem die öffentlichen Standardverzeichnisse liegen (Download, DCIM, usw.). Ich habe eine Speicherbibliothek, die überprüft, ob External verfügbar ist, wenn nicht - konfiguriert, um Internal zu verwenden. Ich war jedoch völlig außerstande, auf die öffentlichen Verzeichnisse zuzugreifen, mit oder ohne die Bibliothek. Hier meine Eindrücke:

  • Eine externe Partition erkannt wird, Environment.getExternalDirectory() einige öffentliche Ordner zurückkehren, MEDIA_MOUNTED (Lesen/Schreiben) Status, aber ich kann nicht schreiben, lesen, erstellen dir irgendetwas überhaupt (lesen/schreiben Berechtigungen in Manifest.xml richtig eingestellt);/sdcard ist leer, wenn von irgendeinem Ort zugegriffen wird, nicht von einem anderen, einige Voodoo Symlink Magie, ich denke ...

  • Auf der anderen Seite, wenn ich auf die Verwendung der Internal storage, kann ich nur Dateien in die Anwendung schreiben Privater Ordner (com/myapp /.../ app_)/SD-Karte ist nicht zugänglich, obwohl es in der internen, praktisch ist.

  • versucht Intents und ContentResolvers zu verwenden, um das Android OS selbst entscheiden zu lassen, wie man Zugriff auf Daten und die öffentlich-internen Verzeichnisse erhält. Selbst wenn es funktionierte, musste ich meine FileUtils und FilePicker vollständig neu implementieren, nur wegen dieses spezifischen Geräts. (Die App hat auf mehreren Tablets, Telefonen, Emulatoren usw. funktioniert.)
  • von Terminal gibt mir direkter Zugang zu den öffentlich-internen Verzeichnissen; Android Device Monitor nicht;

Jede Meinung ist willkommen. Vielen Dank.

+1

https://developer.android.com/training/permissions/requesting.html – 1615903

+0

Vielen Dank, 1615 ...! Das hat das Problem gelöst. – speirs23

Antwort

0

Folgen Sie den Links unten, um weitere Informationen:

https://developer.android.com/training/basics/data-storage/files.html https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Wenn Sie eine Datei in den internen Speicher zu speichern, durch den Aufruf einer von zwei Methoden, um das entsprechende Verzeichnis als Datei erwerben können:

  • getFilesDir()
  • getCacheDir()

Zum Beispiel:

File file = new File(context.getFilesDir(), filename); 

Alternativ können Sie openFileOutput() rufen Sie einen Outputstream zu erhalten, die im internen Verzeichnis in eine Datei schreibt. Zum Beispiel ist hier, wie Sie Text in eine Datei schreiben:

String filename = "myfile"; 
String string = "Hello world!"; 
FileOutputStream outputStream; 

try { 
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
    outputStream.write(string.getBytes()); 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Danke, aber ich habe es versucht. Es verwendet die privaten Bereiche der Anwendung. Und ich muss Dateien in den öffentlichen Ordnern (Download, DCIM) erstellen/lesen/schreiben können. Was sich zufällig auf dem internen Speicher für dieses spezielle Gerät befindet. – speirs23

Verwandte Themen