Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.05.2014, 00:52

[Android] Textdatei auf externen Speicher schreiben / lesen

Hallo,
ich habe mir ein Nexus 7 2013 zum programmieren gekauft. Nun möchte ich "Hallo Welt" in einer Textdatei, im Ordner Documents, schreiben und den Text aus der Datei wieder auslesen und anzeigen.
Mein bisheriger versuch sieht so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    public void MB(CharSequence text) {
        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
        Log.d("Message", text.toString());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e("Message", "Log Start...");

        MB(Environment.isExternalStorageEmulated() ? "true" : "false");
        MB(Environment.getExternalStorageState());

        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
        MB(path.toString());

        path.mkdir();

        MB(path.isDirectory() ? "true" : "false");

        File file = new File(path, "test.txt");
        MB(file.toString());

        try {
            OutputStream os = new FileOutputStream(file);
            String s = "hallo du da";

            os.write(s.getBytes());
            os.close();

        } catch (FileNotFoundException e) {
            MB(e.toString());
        } catch (IOException e) {
            MB(e.toString());
        }

        try {
            InputStream is = new FileInputStream(file);
            StringBuilder builder = new StringBuilder();
            int ch;
            while((ch = is.read()) != -1){
                builder.append((char)ch);
            }
            MB(builder.toString());
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Log.e("Message", "Log End");
    }


Das klappt so weit.

Nun zum Problem:
Wenn ich das Tablet mit meinen PC, per USB, verbunden habe, finde ich die Datei mit dem Windows Explorer nicht auf dem Tablet. Es existiert auch kein Ordner Dokuments. Ich vermute das hängt damit zusammen das es keine externe Speicherkarte gibt. Das Nexus hat auch keinen Slot dafür und diese Funktionalität wird irgendwie emuliert. Was auch Environment.isExternalStorageEmulated() mit dem Rückgabewert true bestätigt. Ein anderes Spiel aus dem PlayStore kann aber im Ordner Picture ein Screenshot speichern, was ich mir auf meinem PC ansehen kann.
Im Manifest stehen auch die zeilen:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
um überhaubt Lese- und Schreibrechte für die App zu bekommen.
Nun weiss ich nicht mehr weiter.
Ziel des ganzen ist es, dass ich Dateien zwischen Tablet App und PC tauschen kann.

Ich hoffe ihr könnt mir helfen.

Hannes

2

03.05.2014, 20:01

Kennt niemand das Problem? Hab ich es schlecht beschrieben? Hier sind doch in letzter Zeit einige Android Projekte vorgestellt worden. Hattet ihr mit Dateien nicht dieses Problem? Hm..., vielleicht schaue ich mir mal libGDX. Wie sind damit eure Erfahrungen?

Hannes

3

04.05.2014, 01:05

Ich kenne mich damit zwar nicht aus, aber ich weiß soviel, dass Android eine Indizierung der Dateien pflegt, die irgendwie aktualisiert werden sollte, bevor sie in dem Medienübertragungsdiensten sichtbar / zugängig ist. Nach 2 Minuten googlen bin ich zu einer möglichen Lösung gekommen:

Quellcode

1
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));


Quelle: http://stackoverflow.com/questions/18292…ounted-on-windo
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

4

04.05.2014, 15:42

Hat geklappt. Danke.

Werbeanzeige