Mittwoch, 8. Januar 2014

Android: Programmdaten dauerhaft speichern (im externen Speicher)

Werden die Anwendungen komplexer, möchte man sicherlich bestimmte Daten auch dauerhaft im Handy speichern um z.B. beim nächsten Programmstart auf diese zugreifen zu können. Hierfür bietet Android im wesentlichen 2 Speicherbereiche, den internen und den externen Speicher an.
Im internen Speicher werden die Daten so gespeichert, dass nur die Anwendung darauf zugreifen kann, beim Deinstallieren werden diese automatisch gelöscht.
Der externe Speicher ist dagegen ein Speicher, auf den jeder zugreifen kann, also auch der Nutzer vom PC aus zum Beispiel.
Die Bezeichnung interner und externer Speicher kommt aus den Anfangszeiten von Android, wo Mobiltelefone noch einen kleinen internen Speicher hatten und ggf. einen externen in Form zum Beispiel einer SD – Karte. Heutzutage jedoch sind beide Speicherarten meist im „wirklichen“ internen Speicher des Smartphones untergebracht, die Unterscheidung ist also nur noch in Bezug auf den Zugriff.
Trotzdem sollte immer geprüft werden, ob der externe Speicher vorhanden („gemounted“) ist.
Da ich ein paar Probleme mit dem internen Speicher hatte und meine Daten gerne auch per Hand editieren können möchte, nutzte ich meistens den externen Speicher, über wessen Verwendung ich hier posten möchte.
Damit die App den externen Speicher nutzen kann, muss zuerst die Permission WriteExternalStorage in der AndroidManifest.xml gesetzt werden.
Den Pfad zum externen Speicher erhalten wir über Android.OS.Environment.ExternalStorageDirectory.Path.
Dann können wir wie von Windows bekannt auf diesen zugreifen, Dateien schreiben lesen etc.
Im folgenden kleinen Beispiel wird über die Eigenschaft ExternalStorageState zuerst geprüft, ob der externe Speicher vorhanden ist. Dann erstelle ich die Datei "TestFile.txt“ im Ordner „ExternalStorageTest“ mittels eines StreamWriters und schreibe eine Zeile in diese. Wie unter Windows auch müssen alle vorkommenden Ordner vorhanden sein, deswegen prüfen wir dies mit einem Directory Objekt und legen den Ordner ggf. an.
Da diese Sachen von der Windows Programmierung her bekannt sein sollten, hier einfach der komplette Code:
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

using System.IO;

namespace ExternalStorageExample
{
     [Activity (Label = "ExternalStorageExample", MainLauncher = true)]
     public class MainActivity : Activity
     {
          protected override void OnCreate (Bundle bundle)
          {
               base.OnCreate (bundle);

               // Set our view from the "main" layout resource
               SetContentView (Resource.Layout.Main);

               if (Android.OS.Environment.ExternalStorageState == "mounted") {
                    string Path = Android.OS.Environment.ExternalStorageDirectory.Path + "/ExternalStorageTest/";

                    if (!Directory.Exists (Path))
                         Directory.CreateDirectory (Path);

                    StreamWriter sw = new StreamWriter (new FileStream (Path + "TestFile.txt", FileMode.Create));
                    sw.WriteLine ("Test");
                    sw.Close ();
               }
          }
     }
}


Keine Kommentare:

Kommentar veröffentlichen