Android Kann nicht mehr auf SDCard schreiben

achilles

Mitglied
Meine Anwendung kann auf einem Motorola Defy nicht mehr auf die SDCard schreiben: auf einem HTC Desire und einem HTC Legend sowie einem Motorola Milestone funktioniert es. Auf dem Defy anfangs auch. Doch ohne erkennbaren Grund funktioniert es jetzt auf dem Defy nicht mehr.

Der Code ist folgender:
Java:
_imageFile = new File(path);
if (!_imageFile.exists()) {
    Log.v(TAG, "Create image file " + path);
    if (!_imageFile.getParentFile().mkdirs()) {
        Log.v(TAG, "Unable to create dirs.");
    }
    try {
        _imageFile.createNewFile();
    } catch (IOException e) {
        Log.v(TAG, "IOException: " + e.toString());
    } catch (SecurityException e) {
        Log.v(TAG, "SecurityException: " + e.toString());
    }
} else {
    Log.v(TAG, "image file already created.");
}

Der Code wirft eine IOException mit dem Hinweis, dass die Datei nicht erstellt werden kann. Aber warum nicht?
Auf der SDCard ist ausreichend Platz, ich kann auch über den FileBrowser von DDMS Dateien anlegen und auf allen anderen Geräten funktioniert es ebenfalls.

Hat irgendjemand eine Ahnung, woran das liegen könnte?
 
@diel2001: ja, das entsprechende Recht habe ich im Manifest gesetzt - wie gesagt: im Emulator und auf anderen Geräten funktioniert es auch.

@mjdv: ja, das prüfe ich (sorry, das hatte ich nicht im Codeschnippsel, den ich am Anfang eingefügt hatte drin):

Java:
public void onClickTakePicture(final View v) {
    String storageState = Environment.getExternalStorageState();
    Log.v(TAG, "StorageState = " + storageState);
    if (storageState.equals(Environment.MEDIA_MOUNTED)) {
        mImage = new Image(this, mDb, _id);
        String path = Image.SD_IMAGE_DIR + "/" + mImage.fileName;
        _imageFile = new File(path);
        if (!_imageFile.exists()) {
            Log.v(TAG, "Create image file " + path);
            _imageFile.getParentFile().mkdirs();
            try {
                _imageFile.createNewFile();
            } catch (IOException e) {
                Log.e(TAG, "IOException: " + e.toString());
            }
        } else {
            Log.v(TAG, "image file already created.");
        }
        if (!_imageFile.canWrite()) {
            Log.e(TAG, "Can't write to File.");
        }

        cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
                .fromFile(_imageFile));
        try {
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
            Log.v(TAG, "Start Activity 'ImageCapture'");
        } catch (Exception e) {
            Log.e(TAG, "Exception while capturing image: " + e.toString());
        }
    } else {
        Log.v(TAG, "SDCard not mounted.");
        Toast.makeText(this, "SDCard not mounted.", Toast.LENGTH_LONG)
                .show();
    }
}

Log.v() in der zweiten Zeile der Methode gibt im LogCate "StorageState = mounted" aus.

Ich habe am Wochenende noch mal ein wenig herumprobiert: wenn ich in das betreffende Gerät eine andere SDCard einsetze, funktioniert es. Ich habe daraufhin von der alten Karte ein Backup gemacht, die Karte formatiert und das Backup zurückgespielt - wieder das gleiche Problem. Ich werde heute mal schauen, ob ich mit der betreffenden Karte das selbe Problem in einem anderen Gerät habe.

Gibt es für Android eigentlich eine Art fsck?
 
Ich habe die betreffende SDCard jetzt mal in einem anderen Gerät ausprobiert: dort funktioniert es auch nicht, allerdings kriege ich eine etwas aussagekräftigere Fehlermeldung:
Code:
IOException: java.io.IOException: No space left on device
.

Eigentlich sollte noch 1GB frei sein ???:L

Vermutlich ist also die Karte defekt - aber warum kann ich dann trotzdem regulär Bilder machen oder Datei auf das Gerät kopieren?
 
Ich dachte, ich hätte das Problem durch einen Wechsel der SD-Karte gelöst.
Mittlerweile habe ich noch zwei weitere DEFY und siehe da: das selbe Phänomen. Nach einer gewissen Zeit - wenn die Karte etwa zu 50% voll ist - wirft die Anwendung eine IOException ... ???:L

Bei dem ersten Gerät dachte ich ja noch, die SD-Karte wäre irgendwie defekt. Eigentlich wollte ich ja noch 10 weitere DEFY bestellen - aber wenn ich bei drei Geräten dieses merkwürdige Problem habe und bei allen anderen Geräten (HTC Desire, HTC Legend, Motorola Milestone) dieses Problem nicht auftritt, schrecke ich davor zurück...

Hat vielleicht irgendjemand ein ähnliches Problem mit dem DEFY?
 
Problem gelöst!!!

Ich habe endlich herausgefunden, wieso ich auf der Karte keine weiteren Dateien mehr speichern kann, obwohl noch genug Platz vorhanden ist: das Defy wird mit einer 2GB-Karte geliefert und diese scheint mit FAT16 formatiert zu sein - die Folge: man kann im Hauptverzeichnis (und dort speichere ich die Dateien) maximal 512 Dateien abgelegt werden. Da ich lange Dateinamen verwende und deshalb pro Datei mehrere Einträge "verschwendet" werden, war bei mir schon mit ca. 130 Dateien Schluss...

Die 4GB-Karte ist mit FAT32 formatiert und dort gibt es diese Beschränkung nicht.

Also, Thema abgeschlossen.
 
das Defy wird mit einer 2GB-Karte geliefert und diese scheint mit FAT16 formatiert zu sein
WOW!

Sony lieferte also seine handys mit SD Karten aus, die in einem absolut zeitgemässen Dateisystem formatiert war, FAT16 ist ja auch erst von 1983...:autsch:
 
Motorola, nicht Sony.

Aber ja, ich hätte auch nicht gedacht, dass ich jetzt noch mal über dieses uralte Problem stolpere. Vor ein paar Jahren wäre ich bestimmt auch schneller darauf gekommen, woran es liegt...
 

Zurück
Oben