Wie komme ich auf die interne SD-Karte?

  • Hallo,


    ich programmiere für ein HUAWEI Ascend Y 200, bzw. mir steht dies Gerät für die Entwicklung zur Verfügung. Gemäss HI-Suite habe ich folgenden Speicher:




    Gerät: 165 MByte


    Interne SD-Karte: 18 MByte


    Speicherkarte: 7,5 GB




    Der Android Dateimanager zeigt an:




    lokal: 18 MByte


    SD-Karte: 7,5 GB




    Ich benötige ein Datenverzeichnis für die App. In erster Linie soll dort die Ini-Datei der App zugänglich sein. Gemäss den Angaben habe ich eine interne und externe SD-Karte. Auf beiden Speichermedien habe ich das Verzeichnis "Android/data" in denen fremde Apps auch schon etwas hinterlegt haben.




    Frage: Kann man immer davon ausgehen das ich eine interne und externe SD-Karte


    auf Andoid-Geräten zur Verfügung habe?




    Wenn ja, so möchte ich die Daten meiner App auf die interne SD-Karte ablegen.




    Mit Environment.getExternalStorageDirectory() komme ich auf die externe SD-Karte.


    Mit getFilesDir() komme ich in den internen Speicher.




    Aber wie komme ich auf die interne SD-Karte?


    Gruss Klaus.

  • Hi KlaRa54,


    Zitat


    Kann man immer davon ausgehen das ich eine interne und externe SD-Karte auf Andoid-Geräten zur Verfügung habe?


    mmhh nein kannst du nicht.
    Es gibt Geräte ohne SD Karte, es gibt welche mit SD und festen Speicher und es gibt scheinbar wie in deinem Fall Geräte mit 2 SD -Karten.


    Kann man die zweite eigentlich raus nehmen? Oder ist das eine große die dann einfach nur "geteilt" wurde?


    Falls du dein Gerät gerootet hast oder du in den EMU schaust kannst du sehen das im Verzeichnis Android/data/data deine Applikation gespeichert wird. Innerhalb dieser kannst du Dateien speichern außerhalb nicht. (ausgenommen die externe Sd-Karte und Apps mit Root rechte).
    Der Ordner Android/data auf der externen SD-Karte wird vom System genutzt um die Apps zu verwalten die man auf die Sd-Karte verschoben hat bzw deren Daten.


    Ich hab ehrlich gesagt keine Ahnung wie das bei deinen Gerät ist aber das ablegen von Daten auf einer SD-Karte bietet immer die Gefahr das wenn die SD-Karte gemountet ist das dann dein App nicht auf die Daten zugreifen kann.(bei dieser internen kann das natürlich anderes sein)


    Eine Alternative zum laden einer Init-Datei wären Shared Preferences.
    Damit lassen sich halt ziemlich simple Benutzereinstellungen speichern.

  • Hallo titus,
    ich habe inzwischen meine SpeicherTools so eingerichtet das ich wahlweise auf die externe SD-Karte oder auf den internen Speicher (nicht interne SD-Karte!) zugreifen kann. Die Ini-Datei soll den User die Konfiguration der App ermöglichen. Deshalb sollte sie auch per USB erreichbar sein. Gut, ich könnte auch alles intern ablegen und in der App per Optionen die Werte zugänglich machen. Dies war aber bislang nicht gefordert.


    Ich arbeite unter Eclipse Indigo. Seit letzter Woche debugge ich nicht mehr unter dem Emulator sondern gehe direkt auf das Handy. Das hat gewisse Vorteile. Wenn ich mit dem internen Speicher arbeite, dann möchte ich auch in der Entwicklungsumgebung Zugriff auf den Speicher haben. Also sehen was sich da tut. Die beiden SD-Karten erscheinen als Wechseldatenträger und Windows und unter Android kann ich mit dem Dateimannager zugreifen. Der interne App-Speicher ist mir leider nicht zugänglich.


    >> Eine Alternative zum laden einer Init-Datei wären Shared Preferences


    Mit Shared Preferences arbeite ich auch. Damit erfolgt hauptsächlich die Weitergabe von Werten zwischen den Activity`s. In der Tat lese ich die Ini-Datei anfangs aus und speichere die Werte dann in Shared Preferences. Aber wie gesagt, der User soll per Ini-Datei die App konfigurieren können.


    Gruss Klaus.

  • Wenn es wirklich zwingend ist, dass der Benutzer die .ini selbst editieren kann, muss du diese wohl oder übel auf dem externen Speicher lassen. Auf den internen Speicher bekommst du keinen Zugriff (mit Außnahme der App selbst), das hat Google nicht ohne Grund so gehandhabt.


    Wie titus aber schon sagte, musst du bei dem externen Speicher darauf achten, dass dieser auch gemountet werden kann. D.h. du musst selbst überprüfen ob dieser verfügbar ist oder nicht (mittels getExternalStorageState(), kleines Beispiel ist ja bei dem Guide auch dabei).


    Kleines Workaround was mir noch einfällt: Du könntest eine Import/Export-Funktionalität mit einbauen, sodass die .ini auf die SD zum bearbeiten exportiert wird und danach wieder importiert(in den internen Speicher geladen wird). So steht die Konfiguration immer für die App bereit und wird nur nach einem Import überschrieben.


    block_

  • Hallo block_,
    mit Deiner Antwort und die von titus bin ich jetzt gut informiert. Beim Zugriff auf den externen Speicher wird die Verfügbarkeit jedes mal beim Instanziieren des Konstruktors geprüft. Deinen Workaround finde ich interessant. Ich werde das Thema mal in dem Team besprechen.


    Danke an euch beiden.
    Gruss Klaus.

Jetzt mitmachen!

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