Lesen / Schreiben einer Textdatei - SD-Karte

TorstenM1979

Mitglied
Hallo,

ich bin gerade etwas am Verzweifeln. Ich versuche mich an meiner ersten Android-App, es soll ein ganz einfacher Vokabeltrainer werden. Ich kann zwar Java ansich ganz gut programmieren, habe aber mit Android absolut keine Erfahrungen. Daher fällt es mir schwer, bestimmte Aspekte wie Android-Version, SDK-Version, etc. richtig einzuordnen.

Im Netz gibt es sehr viele Anfragen und auch "Lösungen", wie man sich die notwendigen Rechte holt, um Dateien zu lesen bzw. zu schreiben. Aber die Lösungen, so scheint es mir jedenfalls, sind immer davon abhängig, welche Softwareversionen man selbst verwendet. Bitte korrigiert mich, falls ich falsch liege.

Ich habe im Manifest versucht, die Schreib- und Leserechte anzufordern und bekam den Hinweis, dass
Code:
android.permission.READ_EXTERNAL_STORAGE
und
Code:
android.permission.WRITE_EXTERNAL_STORAGE
obsolete seien. Ich solle doch den
Makefile:
MediaStore
benutzen. Nun ist eine einfache Textdatei keine Mediendatei.

Könnte mir irgendjemand einen Link oder ein Beispiel geben, mit dem ich ein Verzeichnis auf der SD Karte erstellen und im Anschluss eine Textdatei schreiben kann?

Vielen Dank im Voraus
Torsten
 

TorstenM1979

Mitglied
Hm...

also als Einsteiger ist es echt nicht leicht, die Beschreibungen des SDKs sind aus meiner Sicht nicht ausreichend. Aber gut, hiermit https://ourcodeworld.com/articles/r...e-external-storage-permission-work-in-android habe ich es geschafft - denke ich jedenfalls, sicher bin ich mir nicht. Es kam eine Einstellung, dass ich den Dateizugriff manuell gestatten muss. Sollte also passen.

Nun möchte ich Verzeichnisse und Dateien erstellen. Aber hier scheint etwas noch nicht zu passen, ich kann im Debugger mit F8 drüber gehen, keine Exception. Alles gut denke ich mir, aber es wurde weder ein Verzeichnis noch eine Datei erstellt.

Was mache ich hier nun falsch?


VG Torsten
 

TorstenM1979

Mitglied
@walex: So hatte ich es anfangs auch gemacht, hat auch wunderbar funktioniert. Nun möchte ich es aber erstmal vermeiden, eine Eingabemöglichkeit zum Anlegen von neuen Vokabeln zu programmieren (zuvor waren die Vokabeln hart kodiert). Ich will also am Rechner die Vokabeln in eine XML-Datei schreiben, von der App aus lesen und auch den Lernfortschritt darin speichern.

VG Torsten
 

TorstenM1979

Mitglied
Hallo,

so hatte ich es erst auch gemacht. Hat wunderbar funktioniert. Ich will aber erstmal keine Möglichkeit zum Anlegen von neuen Vokabeln programmieren. Mir ist es vorerst lieber, wenn ich die Vokabeln per XML Datei einlese. Das Speichern ist dann für den Lernfortschritt notwendig.

VG Torsten
 

Jw456

Top Contributor
Java:
intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
das ist erst ab Android 11 APi 30 verfügbar
 
Zuletzt bearbeitet:

TorstenM1979

Mitglied
Hallo,

ich habe eine statische Variable in meiner MainActivity-Klasse:

Java:
public static final File ExternalStorage = new File(Environment.getExternalStorageDirectory().toString(), "/Vokabelkiste");

und zwei Methoden:

Code:
@RequiresApi(api = Build.VERSION_CODES.R)
private void initializeExternalStorage() {
    try {
        ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE }, 1);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (isExternalStorageManager(ExternalStorage)) {
                // we have access, all fine
            } else {
                var intent = new Intent();
                var uri = Uri.fromParts("package", this.getPackageName(), null);

                intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(uri);
                startActivity(intent);
            }
        }

        this.createPathIfNotExists();
    } catch (Exception exception) {
        throw new RuntimeException("External storage could not be initialized", exception);
    }
}

Code:
private void createPathIfNotExists() throws Exception {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        if (Files.exists(Paths.get(ExternalStorage.toURI()))) {
            return;
        }

        Files.createDirectory(Paths.get(ExternalStorage.toURI()));
    }
}

Mit der ersten Methode prüfe bzw. hole ich mir die Rechte zum Schreiben auf die SD Karte. Die zweite Methode soll ein Verzeichnis erstellen, falls es noch nicht existiert.


VG Torsten
 

Jw456

Top Contributor
Java:
private void createPathIfNotExists() throws Exception {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // sollte R sein
   
...
File file = new File(Environment.getExternalStorageDirectory() + "/" + "test");
boolean folderCreated = file.mkdir();

    }
}
Wie schon gesagt get der Code erst ab API 30 Android 11.
darunter nicht.
 

TorstenM1979

Mitglied
Wenn ich in die Moduleigenschaften meines Projektes rein schaue, steht dort <Compile Sdk Version> = 33 und Android 13.0 Tiramisu. Sollte das nicht passen?

VG Torsten
 

walex

Mitglied
Hallo,

so hatte ich es erst auch gemacht. Hat wunderbar funktioniert. Ich will aber erstmal keine Möglichkeit zum Anlegen von neuen Vokabeln programmieren. Mir ist es vorerst lieber, wenn ich die Vokabeln per XML Datei einlese. Das Speichern ist dann für den Lernfortschritt notwendig.

VG Torsten
Verstehe ich jetzt nicht. Irgendwoher müssen ja die (ersten) Vokabeln kommen, entweder liefert Du in der App bei der Installation welche mit (z. B. im assets folder, dann auch gerne per xml) oder der Nutzer muss welche eingegeben. Warum must Du die Vokabeln unbedingt in einem öffentlichen Verzeichnis halten, warum reicht da nicht das App- spezifische?
 

Jw456

Top Contributor
Weil er die Datei wohl für eimen In und Export dem User zur Verfügung stellten willen. Fur das reine Arbeiten würde sicher der App Speicherbereich reichen.
 

TorstenM1979

Mitglied
Richtig, die ersten Vokabeln waren hart-kodiert und anschließend im App-Verzeichnis gespeichert. Das hart kodieren funktioniert auf Dauer natürlich nicht. Mit Visual Studio Code lassen sich Xml Dateien wunderbar schreiben und gegen eine Xsd prüfen. Das würde mir alles erstmal reichen.

VG Torsten
 

Jw456

Top Contributor
Die Hauptfrage war wie du die XML Datei der App (APK) mitgeben willst?

Oder soll der User erst nach dem App installieren die Datei selber erstellen?

Ich gehe mal davon aus das die App erstmal nur für dich ist. Und du dir selber eine Datei in einen Ordner der SD Karte selber im Vorfeld angelegt hast.
 

walex

Mitglied
Ich gehe mal davon aus das die App erstmal nur für dich ist. Und du dir selber eine Datei in einen Ordner der SD Karte selber im Vorfeld angelegt hast.
Eben, das denke ich auch. Und dann ist m.E. das Einfachste, diese Datei in den Asset-Felder zu kopieren und daraus zu laden. Keine Berechtigung und sondtige Klimmzüge mehr nötig
 

Jw456

Top Contributor
Eben, das denke ich auch. Und dann ist m.E. das Einfachste, diese Datei in den Asset-Felder zu kopieren und daraus zu laden. Keine Berechtigung und sondtige Klimmzüge mehr nötig
Er will auf die Datei auch schreibend zugreifen also müsste er sie auch erstmal aus den Assets in den App Speicherbereich zu Laufzeit kopieren.

Zweitens scheint er ohne das er die APP neu kompiliert wird, die Vokabeln erweitern wollen.
Und wie er selber in Post #7 sagte will er erst mal keine Eingabe der Vokabeln in der App schreiben.


Er wird wohl die Datei auch vom außerhalb der App Bearbeiten wollen. ZB am PC.
 

TorstenM1979

Mitglied
G' Morgen,

sorry, bin gerade aus dem Urlaub zurück. Also nochmal langsam :)

1) Ich möchte am PC eine XML Datei editieren, in der die Vokabeln inkl. möglicher Übersetzungen zu finden sind. Diese will ich dann immer wieder mal erweitern und auf das Smartphone kopieren. Entweder auf die SD Karte, oder in den internen Bereich. Mittels Windows Explorer ginge das ja auch.

2) Die App soll in der Lage sein, diese XML zu lesen und zu schreiben. Schreiben deswegen, weil ich mir auch den Lernfortschritt speichern will bzw. muss. Ich will die gelernten Vokabeln natürlich "nach hinten" schieben, damit die nicht ständig abgefragt werden. Macht ja wenig Sinn.

Um erstmal mit dem Lernen voranzukommen, würde mir das so absolut ausreichen. Ich muss keine Vokabeln am Smartphone anlegen oder verändern, das Editieren am Rechner ist erstmal völlig ausreichend.


VG Torsten
 

walex

Mitglied
Wenn das Deine Anforderungen sind ist es m.E. das einfachste, den internen App-Speicher zu nehmen.
Die Datei kannst Du auf dem PC editieren und - wie Du ja selbst schreibts - in dieses Verzeichnis schieben.
Dieses Verzeichnis ist ohne eine Berechtigungsanforderung lese- und schreibbar für Deine App, da kannst Du dann auch weitere Dateien ablegen.
 

walex

Mitglied
Das wäre dann
Java:
Galaxy A21s\Interner Speicher\Android\data\Vokabelkiste\Vokabeln.xml
?
eher

<Dein_Device>\Interner Speicher\Android\data\<dein_packagename>\files

Aber ich muss zugeben: Ich habe das noch nie über den Windows-Explorer gemacht sondern nehme dazu immer den 'Device File Explorer' von Android Studio :)
 

TorstenM1979

Mitglied
Okay, ich versuche das mal. Sobald ich diesen Fehler hier beseitigt bekomme. Also ganz ehrlich, solche Probleme kenne ich bisher nicht:

Java:
Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations$ReflectSdkVersion found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.io.path.ExperimentalPathApi found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.io.path.PathRelativizer found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.io.path.PathsKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.io.path.PathsKt__PathReadWriteKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.io.path.PathsKt__PathUtilsKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.jdk7.AutoCloseableKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
Duplicate class kotlin.jvm.jdk8.JvmRepeatableKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.random.jdk8.PlatformThreadLocalRandom found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.streams.jdk8.StreamsKt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$1 found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$2 found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$3 found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.streams.jdk8.StreamsKt$asSequence$$inlined$Sequence$4 found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.text.jdk8.RegexExtensionsJDK8Kt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)
Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)

Go to the documentation to learn how to Fix dependency resolution errors.

Ich kann nicht einmal mehr ein neues /leeres Projekt aufsetzen :-(

Keine Ahnung, warum jetzt dieser Fehler auftritt. Was muss ich tun?

VG Torsten
 

walex

Mitglied
Du hast dependencies auf zwei verschiedene kotlin-stdlibs.

Vermutlich eine im classpath, die andere als plugin :)

Zeig mal deine build.gradle files...
 

TorstenM1979

Mitglied
Java:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '8.0.2' apply false
    id 'com.android.library' version '8.0.2' apply false
}

plugins {
id 'com.android.application'
}

Code:
plugins {
    id 'com.android.application'
}

android {
    namespace 'de.tmende.vokabelkiste'
    compileSdk 33

    defaultConfig {
        applicationId "de.tmende.vokabelkiste"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.navigation:navigation-fragment:2.6.0'
    implementation 'androidx.navigation:navigation-ui:2.6.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

Das sind die beiden von einem neuen, leeren Projekt.
 

walex

Mitglied
Ok.
dependencies {

implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment:2.6.0'
implementation 'androidx.navigation:navigation-ui:2.6.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
Egänze mal die dependencies mit
Code:
    modules {
        module("org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
            replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
        }
        module("org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
            replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk8 is now part of kotlin-stdlib")
        }
    }

Einfach in die dependencies über den ersten implementation-Eintrag kopieren. Anschliessend gradle-sync und build.
 

TorstenM1979

Mitglied
Vielen dank, das hat funktioniert.

Mit dem Lesen scheint es aber nicht zu funktionieren, ich habe eine xml-Datei unter
Java:
Galaxy A21s\Interner Speicher\Android\data\de.tmende.vokabelkiste\files\de-DE-es-ES.xml
abgelegt, bekomme beim Lesen aber eine Exception
Code:
java.io.FileNotFoundException: /data/user/0/de.tmende.vokabelkiste/files/de-DE-es-ES.xml: open failed: ENOENT (No such file or directory)

Den Pfad ermittle ich mit
Code:
getApplicationContext().getFilesDir();

Ich vermute mal, ich bin im falschen Pfad?

VG Torsten
 

walex

Mitglied
Vielen dank, das hat funktioniert.

Mit dem Lesen scheint es aber nicht zu funktionieren, ich habe eine xml-Datei unter
Java:
Galaxy A21s\Interner Speicher\Android\data\de.tmende.vokabelkiste\files\de-DE-es-ES.xml
abgelegt, bekomme beim Lesen aber eine Exception
Code:
java.io.FileNotFoundException: /data/user/0/de.tmende.vokabelkiste/files/de-DE-es-ES.xml: open failed: ENOENT (No such file or directory)

Den Pfad ermittle ich mit
Code:
getApplicationContext().getFilesDir();

Ich vermute mal, ich bin im falschen Pfad?

VG Torsten
Ja, das ist der falsche Pfad. Der müsste so aussehen:
Java:
/data/data/<dein_packagename>/files
Ich sage ja - mit dem Windows-Explorer habe ich das nie probiert. Schon mal über Android Studio versucht?
 

walex

Mitglied
Klar.
Ich habe da am Rand ein Label mit 'Device File Explorer'.
Wenn das bei Dir nicht da ist öffne einfach im Menu 'Help->Find Action' mit dem Stichwort 'Device File Explorer'
 

TorstenM1979

Mitglied
Ah, habe es schon gefunden. Mit der automatischen Ermittlung des Pfades geht es nicht, aber mit einem hart kodieren Pfad. Reicht erstmal aus.

Vielen, vielen, vielen, vielen Dank für deine Unterstützung - unbezahlbar ;-)

VG Torsten
 

Jw456

Top Contributor
Eines möchte ich noch zu diesem Speicher Path noch erwähnt haben.
Beim Deinstallieren der App wird auch der Ordner gelöscht mit Inhalt.
Also dein Xml wird nach dem Deinstall nicht mehr da sein.
 

KonradN

Super-Moderator
Mitarbeiter
Da die technischen Dinge soweit abgeschlossen scheinen, möchte ich noch ein paar Dinge erwähnen, die mir bei diesem Thread durch den Kopf gegangen sind. Diese sind aber nur dann interessant, wenn es bei der App um mehr geht als eben nur eine Spielerei oder den Eigennutzen.

Usability

Wenn man eine App an Dritte geben möchte, dann ist die Usability wichtig. Nutzer sollen die App ja problemlos nutzen können. Dazu gehört, dass es möglichst Intuitiv sein muss.

SD Karte
Es ist für Dich durchaus interessant, Daten über eine SD Karte mit dem Computer auszutauschen. Das ist aber ein Weg, der nicht immer geht.
a) Viele Smartphones haben keine Möglichkeit, eine SD Karte einzubinden. Und bei vielen Smartphones, die diese Möglichkeit haben, ist das zugleich auch der Platz für die zweite SIM Karte (Und man hat teilweise nur ein Einschub, d.h. man nimmt dann immer die SIM Karte mit raus wenn man die SD Karte einlegen oder herausnehmen möchte).
b) Die SD Karte enthält Daten. Daher sollte eigentlich jeder Anwender diese Karte verschlüsseln. Zumindest mein Android Handy hatte damals diese Funktionalität. Sobald dies der Fall ist, ist der Datenaustausch zumindest erschwert.

Kabelverbindung
Das Handy einfach anzuschließen an einen Computer ist schon besser. Aber auch hier ist die Usability sehr schlecht. Man muss den Ordner mit den Daten erst einmal finden. Und das kann durchaus unterschiedlich sein. Einige Anbieter erlauben es, Anwendungen auf die SD Karte auszulagern und schon ist der Pfad eine andere.
Und man muss das auch alles erst einmal eingerichtet bekommen. Je nach Anbieter kann das auch relativ problematisch werden.

Daher macht es durchaus Sinn, sich andere Wege zu überlegen.

Nutzung eines gemeinsamen Netzes
Was ich von diversen Anwendungen kenne (z.B. bei einer Keepass Anwendung) ist die Möglichkeit, dass die Anwendung einen kleinen Webserver aktivieren kann. Dann ist das Handy über eine URL erreichbar. Wenn dann die Geräte im gleichen Netzwerk sind, dann kann man auf dem Computer die URL angeben und hat dann guten Zugriff auf die Daten um z.B. Backups herunter zu laden oder Daten hinzu zu fügen und so.
Aber diese Lösung hat auch einiges an Komplexität und ist Fehleranfällig.
a) So kann es sein, dass der WLAN Router direkte Kommunikation aus Sicherheitsgründen nicht zulässt.
b) die Komplexität auf Entwicklerseite ist nicht gerade gering - hier muss man sowas erst einmal in der App einbinden (auch wenn es da durchaus Libraries gibt, die einem viel Arbeit abnehmen). Und zum anderen gibt es technische Einschränkungen (die aber ok sind. App muss dann halt im Vordergrund aktiv sein für diesen Datenaustausch).

Cloud Nutzung
Aus meiner Sicht ist es sinnvoll, einfach auf die Cloud zu setzen. Die großen Cloud Anbieter haben zum einen gute APIs um auf diese zuzugreifen und zum anderen ist es etwas, das in der Regel von allen genutzt wird. Und die Daten sind nicht so sicherheitsrelevant, als das dies hier wichtig wird.

Web Server
Eine Lösung kann natürlich auch ein eigener Webserver sein, mit denen sich die App verbindet. Das kann eine relativ gute Möglichkeit sein auch für weitere Ideen. So kannst Du dann "Vokabel-Packs" anbieten oder so. Und Du hast dann eine bessere Kundenbindung. Kunden haben dann einen Account bei Dir (Geht auch ohne Registrierung. Du kannst z.B. eine Anmeldung über Google Account erlauben. Dann muss ein Kunde da kaum etwas machen. Es läuft nur auf eine einfache Anmeldung hinaus.)

Das einfach nur als eine kleine Liste. Das ist aber nur ein kleines Brainstorming und jede Idee müsste man sich im Detail genauer überlegen. Und da könnte man dann auch recherchieren: Wie machen das denn andere Apps? Was für Erwartungshaltungen haben Anwender? Was kennen die bereits?

Bei diesen schnellen Gedanken möchte ich es dann aber auch belassen. Es soll halt nur eine Denkanregung sein falls die App dann auch mal veröffentlicht werden soll.
 

M.L.

Top Contributor
Und ein SD-Karte kann (wie andere beteiligte Komponenten auch) aus einem x-beliebigen Grund teilweise/komplett ausfallen. Von daher sollte man andere Speicherplätze als Reserve einplanen.
 

Jw456

Top Contributor
Und ein SD-Karte kann (wie andere beteiligte Komponenten auch) aus einem x-beliebigen Grund teilweise/komplett ausfallen. Von daher sollte man andere Speicherplätze als Reserve einplanen.
Richtig
aber den Paht den der TE benutzen will und tut, ist nicht die echte Physikalische SDKarte sondern die Emulierte Karte. Die fest verbaut ist, nicht ausgetauscht werden kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
R Lesen und schreiben von Daten. Android & Cross-Platform Mobile Apps 2
L SecurityException beim lesen/schreiben eine Datei Android & Cross-Platform Mobile Apps 7
B Textdatei auf Handy erstellen / lesen / schreiben? Android & Cross-Platform Mobile Apps 2
W .txt File aus dem Speicher des Smartphone lesen Android & Cross-Platform Mobile Apps 15
V Bytes (Wertebereich 0-255) über BLE empfangen,lesen und speichern Android & Cross-Platform Mobile Apps 1
B Android XML File ein lesen und menü erzeugen Android & Cross-Platform Mobile Apps 1
X Textdatei aus Assets lesen Android & Cross-Platform Mobile Apps 5
B Java ME Textdatei zeilenweise lesen? Android & Cross-Platform Mobile Apps 5
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2
thE_29 Vor dem ersten Posten bitte lesen! Android & Cross-Platform Mobile Apps 0
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
M Android Schreiben von JsonDaten in eine SqliteDB Android & Cross-Platform Mobile Apps 7
Flynn Text-File auf externe Speicherkarte schreiben Android & Cross-Platform Mobile Apps 1
G Realm (jede Sekunde schreiben) Android & Cross-Platform Mobile Apps 1
G In eier File schreiben Android & Cross-Platform Mobile Apps 8
A Android Datei erstellen/schreiben/auslesen Android & Cross-Platform Mobile Apps 1
D Lib für (Desktop-)Java und Android schreiben Android & Cross-Platform Mobile Apps 7
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
A Android Kann nicht mehr auf SDCard schreiben Android & Cross-Platform Mobile Apps 8
T Android Ergebnis eines XML+XSLT "transform" in eine HTML - Datei schreiben (Android) Android & Cross-Platform Mobile Apps 2
M Text in txt-Datei schreiben und nach ABC sortieren? Android & Cross-Platform Mobile Apps 2
B Daten in *.txt schreiben Android & Cross-Platform Mobile Apps 7
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
Jose05 Wie kann man mit einer App Geld verdienen? Android & Cross-Platform Mobile Apps 6
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
M Activity einer anderen App mit result Android & Cross-Platform Mobile Apps 2
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
Mo1234 Plattform in einer App. Bitte um Hilfe! Android & Cross-Platform Mobile Apps 8
P Android Wie bestimme ich den Dateinamen einer Bilddatei? Android & Cross-Platform Mobile Apps 11
B Falsche ausgabe einer Rechnung! Android & Cross-Platform Mobile Apps 8
M Android Dynamische SchriftGröße einer TextView Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android wie kann ich in einer xml nach bestimme item suchen (DOM) Android & Cross-Platform Mobile Apps 7
C Android Diese Art von Werbung in einer App? Android & Cross-Platform Mobile Apps 1
? ständig ändernden Inhalten in einer App Android & Cross-Platform Mobile Apps 2
R Android Eine Website-frame in einer App Android & Cross-Platform Mobile Apps 4
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
S Die Erstellung einer eigenen App,Kosten? Android & Cross-Platform Mobile Apps 1
M Android Speichern einer .txt Datei im InternalStorage Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
C Auf Play Store verlinken - Code in einer Extraklasse Android & Cross-Platform Mobile Apps 1
G Thread in einer Service erstellen Android & Cross-Platform Mobile Apps 0
B Android Spieler Steuerung auf einer Map mit Berge? Android & Cross-Platform Mobile Apps 7
M Android Quellcode einer Website Android & Cross-Platform Mobile Apps 7
K Löschen einer Tabelle bei PlayStore update Android & Cross-Platform Mobile Apps 2
H Veröffentlichung einer Bezahl-App Android & Cross-Platform Mobile Apps 5
Robat Android ConcurrentModificationException während einer for Schleife Android & Cross-Platform Mobile Apps 15
D Android EditText und TextView haben unterschiedliche größen innerhalb einer TableRow Android & Cross-Platform Mobile Apps 18
M Umlaute im Quellcode einer Website richtig darstellen Android & Cross-Platform Mobile Apps 4
M Quellcode einer Website auslesen Android & Cross-Platform Mobile Apps 5
T Android platzsparende Codierung verschlüsselter Texte in einer URI Android & Cross-Platform Mobile Apps 8
S Android "Weiches wechseln" zwischen Views in einer Activity Android & Cross-Platform Mobile Apps 3
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
G Einbinden einer Bibliothek's App Android & Cross-Platform Mobile Apps 2
G Daten von einer Activity zur nächsten übergeben Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
A Beenden einer 2ten Activity Android & Cross-Platform Mobile Apps 3
T Android Multiple SDK-Support in einer Apk Android & Cross-Platform Mobile Apps 5
R Android Unterschiedliche Versionen von Android in einer App Android & Cross-Platform Mobile Apps 7
D Mehrere Kopien von einer Form Android & Cross-Platform Mobile Apps 7
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
S Problem mit Einbindung einer externer Bibliothek Android & Cross-Platform Mobile Apps 2
P Erstellen einer Jar-File Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben