Android SQLite Datenbank auf SDCard speichern

Bitte aktiviere JavaScript!
Hallo zusammen,

könnt ihr mir da sagen was ich da falsch gemacht habe. Irgendwie kann ich meine Datenbank nicht auf der SD Karte speichern obwohl ich nach vielen Anleitungen und Recherche nicht hinbekommen habe.

Ich habe die HelperKlasse so definiert:
Code:
   public ContactDBHelper(Context context) {
        super(context, Environment.getExternalStorageDirectory()+"/"+DATABASE_NAME, null, DATABASE_VERSION);
        Log.e("DB PATH", Environment.getExternalStorageDirectory()+"/"+DATABASE_NAME);
    }
In der Manifest Datei Rechte hinzugefügt:
Code:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Und bei Start der Anwendung alle benötigten Rechte abgefragt

Code:
   public static boolean ensurePermissions(Activity activity)
    {
        if (ActivityCompat.checkSelfPermission(activity.getApplicationContext(),
                Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity.getBaseContext(),
                Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity.getBaseContext(),
                Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity.getBaseContext(),
                Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS}, 0);
            return false;
        }
        return true;
    }
Anstatt in die SD Karte zu schreiben, wird die Datenbank auf meine interner Hauptspeicher geschrieben, warum?

Viele Grüße
lam
 
Anstatt in die SD Karte zu schreiben, wird die Datenbank auf meine interner Hauptspeicher geschrieben, warum?
Weil "external storage" der interne Speicher ist :)

Aus der Doku:
Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.
Wichtig auch:
In devices with multiple shared/external storage directories, this directory represents the primary storage that the user will interact with. Access to secondary storage is available through Context.getExternalFilesDirs(String), Context.getExternalCacheDirs(), and Context.getExternalMediaDirs().
Man müsste an den Pfad auch kommen per
System.getenv("SECONDARY_STORAGE");
 
Hallo mihe7,

vielen Dank für die Antwort.

Das mit dem System.getenv gibt null zurück. Ist das irgendwie Handymarke spezifisch?

Über den zweiten Hinweis bin ich auf meine SD Karte bekommen

Das Verzeichnis lautet irgendwie so:
Code:
/storage/3735-6330/Android/media/
Und mit diesem Code bin ich rangekommen:
Code:
            File[] externalMediaDirs = context.getExternalMediaDirs();
            if (externalMediaDirs.length>1){
                sd =externalMediaDirs[1];
                Log.e("External Storage Path", sd.getAbsolutePath());
            }
Tut zwar, aber ist nicht wirklich das wahre oder?

Grüße
lam
 
Du könntest das machen:
Java:
public File[] getExtStorages() {
    File root = new File("/storage/");
    File[] rootContent = root.listFiles();

    ArrayList<File> drives = new ArrayList<>();
    for (File f : rootContent) {
        if (f.isDirectory() && f.exists() && f.canRead()) {
            drives.add(f);
        }
    }
    if (!drives.contains(Environment.getExternalStorageDirectory())) {
        drives.add(Environment.getExternalStorageDirectory());
    }

    File[] storages = new File[drives.size()];
    for (int i = 0; i < drives.size(); i++) {
        storages[i] = drives.get(i);
    }


    return storages;
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben