Programmpfad unsichtbar

  • Antworten:6
  • Bentwortet
El Bento
  • Forum-Beiträge: 4

09.06.2015, 11:57:15 via Website

Guten Morgen,

ich komme aus einer anderen Ecke: Windows Mobile / Visual Studio.

Ich versuche derzeit eine Android App zu entwickeln (erste Schritte, Android Studio), hierfür muss die App Dateien schreiben und lesen können (nicht SD Karte!)

Das scheint soweit auch zu funktionieren mit openFileInput / Output. So wie ich es verstanden habe sollte dann die Datei (*.txt) im data/data//files Ordner liegen. Schreiben klappt, lesen auch, nur wie kann ich die Datei im Explorere sehen????? Ich sehe ja nichtmal die APK, den Ordner gibt es schlicht nicht. Ziel ist es, den Inhalt einer SQLite DB als CSV zu exportieren für backups, welche dann einfach auf den PC übertragen werden könnten.

Ich versteh das ganze Konzept momentan gar nicht. Ich kenne es nur von Windows Mobile, hier kann man per Browser einfach das Gerät durchsuchen bzw. die Dateien auf den Desktop kopieren.

I'm lost in space...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.06.2015, 13:53:37 via App

Hallo El Bento,
Herzlich wilkommen hier im Forum :)

Bei Android ist das anders, da kannst du Dateien nur im Explorer sehen wenn sie im internen speicher unter /sdcard abgelegt werden. Da wo du deine Text datei jetzt speicherst ist geschützter Speicher und kann von normalen Benutzern nicht eingesehen werden. Um die Daten der Apps zu sehen ist Root (SuperUser oder Benutzer mit allen Systemrechten) erforderlich.
Damit wird verhindert dass man einfach App Datein wie z.b einstellungen oder DBs verändern kann.
Am einfachsten ist wenn du deine Datei in einem Ordner untwr /sdcard speicherst. Dann kannst du und jeser andere Benuter der App die Datei einsehen kopierwn und verändern.

Beachte das beim schreiben in den Internen Speicher zusätzliche Rechte/Permissions notwendig sind. gleiches gilt für lesen.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
El Bento
  • Forum-Beiträge: 4

09.06.2015, 14:55:18 via Website

Ok, das ist schonmal eine Aussage. Das bedeutet also lediglich, die Dateien sind auf jeden Fall da, nur ich kann Sie ohne Root Rechte nicht sehen. Na gut, ob ich später den sdcard Bereich nutzen würde wird sich noch zeigen. Mal schauen wenn ich das finale Gerät hier hab, wie das dort gestrickt ist. Evtl. baut Motorola für deren Mobile Datenerfassungsgeräte (MDE) einen Speicherbereich ein, der quasi als externer Speicher auftaucht. Ich kenne das noch von den MDEs von Casio unter WM 6.5. Hier gabe es zu dem internen Speicher einen fest eingebauten / partitionierten "FlashDisk" Bereich...

Kann ich in den Bereich (den ich nicht sehe ;) ) auch ohne openFileInput zugreifen aus dem Code heraus? Also so:

InputFileStream(new File("/data//datei.txt"));

mit < uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

oder geht das auf Grund der Berechtigungen nicht? openFileInput geht ja, soweit ich das verstehe, nur innerhalb einer Fensterklasse. Ich möchte die Dateizugriffe lieber in einer einfachen (static) Klasse kapseln. Leider fehlt da ja das Context Objekt mit dem ContextWrapper, welcher die openFileInput bereithält.

Wenn ich mich nicht irre, ist ab KitKat der SDCARD Inhalt per se nicht mehr abgreifbar aus dem Explorer von aussen? Oder ist das falsch?

Danke für die Hilfe.

Bent

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.06.2015, 15:03:51 via Website

Aus der App ist das nicht einsehbare Verzeichnis imernoch zugreifbar. Ob für den OpenFileDialog weiss ich nicht, aber du kannst die geschreibenen Dateiein auch wieder lesen. Das gilt aber nur für deine App, denn wie gesagt jede App ha ihr eigenenes geschütztes Verzeichnis wo sie schreiben und lesen darf aber alle anderen nicht.

Das mit der SD-Karte, stimmt nicht ganz:
Es ist in soweit richtig dass man auf eine physische SD-Karte also eine Micro SD zur Speichererweiterung in KitKat nicht überall hin schreiben darf.
Da das bei vielen Geräten eh nicht geht, da sie keine externe SD oder den SD slot besitzen, ist es dann immer ein Problem beide Gerätetytem zu behandeln.

In den internen Speicher ( bei Musik Bilder etc.) kannst du überall hin schreiben, mit der entsprechenden Berchtignung.

Und noch was ist falsch: Lesen geht immer nur schreben nicht und das alles nur auf der externen SD Karte. also nur halb so wild, wenn man diese nicht unbedingt braucht.

Ich weiss nicht ob Motorola da was ändern kann. Die berechtigungen werden von Android System vergeben, ohne entsprechende Recht geht da meiner meiung gar nichts.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
El Bento
  • Forum-Beiträge: 4

09.06.2015, 15:56:20 via Website

Ok, nochmal eine Frage. Ich habe versucht die Datei jetzt mal auf die SD Karte zu schreiben. Gemeckert wurde nicht, aber der Ordner ist auch da nicht sichtbar heul.

/storage/emulated/0/Android/data/com.itkompetenz.www.wlantransfer/files Das soll der Pfad sein, aber sehen tu ich ihn nicht...

Irgendwie blöd...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.06.2015, 16:54:51 via Website

Statt /storage/emualted/0 etc. solltest du das nehmen:Environment.getExternalStorageDirectory()

und dann so:

String path = Environment.getExternalStorageDirectory() + "/Adnroid/data/com.[..]";

Und falls der Ordner nicht existert muss du ihn erst anlegen, sonst gehts nicht:

public static boolean createDirIfNotExists(String path) {
boolean ret = true;

File file = new File(Environment.getExternalStorageDirectory(), path);
if (!file.exists()) {
    if (!file.mkdirs()) {
        Log.e("TravellerLog :: ", "Problem creating Image folder");
        ret = false;
    }
}
return ret;

}

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
El Bento
  • Forum-Beiträge: 4

10.06.2015, 11:30:04 via Website

OMG, it finally works....

Das hat irgendwie gefruchtet, jetzt muss ich nur noch den Code aufräumen ;)

Ich danke Dir für die Hilfe.

Antworten