Pfad auf SD Karte lässt sich nicht erstellen

  • Hallo,


    meine erste App läuft nun. Es bleibt noch ein Problem. Die App greift auf ein Textdatei zu und wertet deren Inhalt aus.


    Bis jetzt habe ich diese Datei und den Pfad dafür manuell angelegt. Das soll anders werden. Wenn die App diese Datei nicht findet, soll sie angelegt werden. Das ist mir bisher nicht gelungen. Mein Vorhaben scheitert an der Anlage des Ordners für diese Datei.


    Hier der Code in der MainActivity, den ich dafür verwenden möchte:


    Das erste Problem liegt in der Zeile 9. Der Pfad wird nicht erzeugt und es wird auch keine Exception ausgelöst. Ob es noch weitere Probleme gibt, weiß ich noch nicht. Grundsätzlich müsste alles funktionieren, denn ich habe den Code in einem Javaprojekt unter Windows erfolgreich getestet.


    Warum funktioniert dieser Code unter Android nicht? Was mache ich falsch, oder was müsste ich anders oder noch zusätzlich machen.


    MfG, kodela

  • Versuch es mal mit android.permission.WRITE_EXTERNAL_STORAGE ;)


    Wenn du aber getExternalFilesDir(java.lang.String) nutzt, dann brauchst du keine spezielle Berechtigung sondern kannst auf dein App-Verzeichnis so zugreifen (welches sich über den packetnamen definiert).

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Hallo Christopher,


    danke für Deine Hinweise, die mich leider nicht weiter gebracht haben.


    Ich muss die Bedingungen, unter denen meine App funktionieren soll, noch einmal kurz beschreiben:

    • Die App soll eine Textdatei, welche auf der externen SD Karte gespeichert ist, einlesen und auswerten.
    • Der Anwender soll die Möglichkeit haben, über den PC diese Textdatei zu modifizieren.

    Das funktioniert bereits jetzt einwandfrei, vorausgesetzt ich habe diese Textdatei manuell auf der SD gespeichert, zum Beispiel unter "/Android/data/user.name/files/Download/name.txt".


    Jetzt wollte ich aber, dass die App, wenn beim ersten Start diese Textdatei nicht angelegt ist, den Pfad dafür und die Datei selbst (mit der Headerzeile) erzeugt. Den Java-Quellcode dafür habe ich in meinem ersten Beitrag gezeigt.


    Leider scheitert mein Vorhaben an fehlenden Schreibrechten, so dass ich schon den Pfad für die Datei nicht anlegen kann (Zeile 9 im Quellcode). Es wird weder der Pfad angelegt noch eine Exception ausgelöst.


    Du schlägst nun vor, es mal mit android.permission.WRITE_EXTERNAL_STORAGE zu versuchen. Ja, so ähnlich habe ich mir das auch gedacht, aber es ist mir bisher, trotz Deines Hinweise nicht gelungen, diese Berechtigung richtig in der AndroidManifest.xml einzufügen.


    So wie Du diesen Eintrag geschrieben hast ("android.permission.WRITE_EXTERNAL_STORAGE") wird er an jeder Stelle als "Unbekanntes Attribut" abgelehnt. Auch wenn ich den ersten Punkt durch einen Doppelpunkt ersetze, ändert das nichts.


    Ich habe es mit android:permission="WRITE_EXTERNAL_STORAGE" versucht. Damit wird MainActivity.onCreate() überhaupt nicht mehr aufgerufen.


    Ich habe es mit <android.permission.WRITE_EXTERNAL_STORAGE /> in <intent-filter> versucht, auch mit Doppelpunkt, ohne dass ich eine Wirkung feststellen konnte.


    Kurzum, mit Deinem ersten Vorschlag erreiche ich nichts. Der Pfad wird nicht angelegt.


    Bleibt Dein zweiter Vorschlag, getExternalFilesDir(java.lang.String) zu nutzen. Dazu habe ich auf der Seite http://developer.android.com/r…roid/content/Context.html Beispiele gefunden, die ich aber leider nicht umsetzen konnte.


    Die Beispiele createExternalStoragePrivateFile() oder createExternalStoragePrivatePicture() setzen eine vorhandene Resourcen-Datei in R.drawable voraus. Also fügte ich in R.drawable eine Datei name.txt hinzu. Erkannt werden aber nur Resourecen Dateien, aber keine Textdateien. Also geht es auch damit wieder nicht.


    Könntest Du mir bitte eine aus Deiner Sicht mögliche Konkrete Lösungsvariante aufzeigen?


    MfG, kodela

  • Also grundsätzlich erklärst du Permissions nach dem Schema:

    XML
    <manifest xlmns:android...>
     ...
     <uses-permission android:name="PERMISSION_NAME" />
     <application ... > ... </application>
    </manifest>


    PERMISSION_NAME ersetzt du dann z.B. durch android.permission.WRITE_EXTERNAL_STORAGE
    Also:


    XML
    <manifest xlmns:android...>
    ...
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application ... > ... </application>
    </manifest>


    Zu dem createExternalStoragePrivateFile():
    Dort wird in der Tat als Beispiel eine Kopie eines Bildes in der App auf den externen Speicher kopiert.
    Also Grundgerüst kannst du also nehmen:


    Hoffe diesmal ist es verständlicher ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Hallo Christopher,


    danke für Deine großartige Hilfe. Ich habe jetzt die benötigten Schreibrechte und kann diese auch für eine reine Textdatei anwenden.


    Dein Hinweis auf <uses-permission> hat mir die Tür zum Verständnis mit dem Umgang der Schreibrechte einen Spalt weit geöffnet. Jetzt habe ich auch die zugehörige Dokumentation gefunden.


    Wegen des Zugriffs auf eine nicht spezialisierte Datei sind die Beispiele in der Dokumentation vielleicht nicht gerade glücklich gewählt worden. "DemoFile.jpg" hier und "DemoPicture.jpg" dort, was macht das für einen Unterschied. Aber auch hier hast Du mir durch den Verzicht auf InputStream als Quelle den richtigen Weg gewiesen.


    Nochmals danke für Deine Hilfe.


    MfG, kodela

  • kurze frage, was machst du wenn die nutzer deiner app keine externe speicherkarte haben?

    Hallo ChampS,


    Deine Frage ist berechtigt, die Antwort für mich eigentlich blamabel. Als absolut Ahnungsloser in Sachen Android hatte ich mir darüber keine Gedanken gemacht. Jetzt, da meine Mini-App fertig ist und bereits auf fünf sehr unterschiedlichen Geräten mit und ohne externer Speicherkarte einwandfrei funktioniert, frage ich mich, warum sie auch ohne externe Speicherkarte funktioniert. Ich weiß es nicht.


    MfG, kodela

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!