Android SQLite Datenbank auf SDCard speichern

L

lam_tr

Top Contributor
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
 
mihe7

mihe7

Top Contributor
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");
 
L

lam_tr

Top Contributor
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
 
L

Lucaaa

Bekanntes Mitglied
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;
}
 
L

lam_tr

Top Contributor
Hallo zusammen,

leider besteht das Problem immer noch. Mittlerweile habe ich an drei Geräten getestet, irgendwie funktioniert das seit Android PIE nicht mehr richtig. Hat jemand einen Vorschlag für mich?

Viele Grüße
lam
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C SQLite Datenbank in Kotlin - App stürtzt immer ab Android & Cross-Platform Mobile Apps 0
J SQLite Datenbank sichern/in ein anderes Verzeichnis kopieren Android & Cross-Platform Mobile Apps 2
B Android SQLite Datenbank 2 Einträge vertauschen? Android & Cross-Platform Mobile Apps 14
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
B Android SQLite Datenbankdatei von SD-Karte zu DatabasePath kopieren Android & Cross-Platform Mobile Apps 5
L Android SQLite mit HSQLDB über Android synchronisieren Android & Cross-Platform Mobile Apps 13
K Android SQLite Query "WHERE _id in (X, Y, Z)" keine Daten Android & Cross-Platform Mobile Apps 6
T Android SQLite getColumnIndex Android & Cross-Platform Mobile Apps 6
N Android Ich kann mit meiner App nicht auf die Datenbank zugreifen Android & Cross-Platform Mobile Apps 4
J Android Probleme mit der Realm Datenbank Android & Cross-Platform Mobile Apps 3
M App Datenbank Server Android & Cross-Platform Mobile Apps 5
J Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ? Android & Cross-Platform Mobile Apps 8
B Android Probleme mit Realm Datenbank Android & Cross-Platform Mobile Apps 2
W Gezielte Ausgabe von abgefragten Inhalt aus Datenbank Android & Cross-Platform Mobile Apps 1
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
EisKaffee Android Datenbank auf real Device Android & Cross-Platform Mobile Apps 4
S Dynamische EditText View eingaben in Datenbank speichern Android & Cross-Platform Mobile Apps 0
D Android-App Datenbank Android & Cross-Platform Mobile Apps 4
C Android Listen/Daten aus der SQLLite Datenbank darstellen Android & Cross-Platform Mobile Apps 2
F Android Datenbank upgrade wird nicht durchgeführt Android & Cross-Platform Mobile Apps 2
P J2ME - Anbindung an externe Datenbank Android & Cross-Platform Mobile Apps 3
M Welche Datenbank für J2ME? Android & Cross-Platform Mobile Apps 5
M Datenbank Android & Cross-Platform Mobile Apps 2
A Android Kann nicht mehr auf SDCard schreiben Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Anzeige


Oben