database Backup - storage/emulated/0

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • database Backup - storage/emulated/0

    Ich versuche von meiner Datenbank ein Backup zu schreiben.
    dabei habe ich nun zwei Probleme
    1) ich versuche ein Directory zu erzeugen storage/emulated/0/test.
    Das lässt er schon gar nicht zu.
    2) dann geht es natürlich auch nicht ein database.db file in dieses Directory zu schreiben. Auch in das existierende storage/emulated/0 kann ich nicht schreiben.
    Was ist denn da der Grund.
    Ich habe keine Hardware mit dem Laptop verbunden sondern simuliere mit z.B. Nexus 7 API 23.
    sd.canWrite bringt mir dann auch "false".
    Mit dem AndroidDeviceMonitor kann ich z.B. schon manuell ein Directrory erzeugen.
    Fehlt da noch was oder ....
    Gruß

    Quellcode

    1. File sd = new File(Environment.getExternalStorageDirectory()+"/test");
    2. if(!sd.exists()){
    3. sd.mkdirs();
    4. }
    5. //
    6. try {
    7. if (sd.canWrite()) {
    8. //String currentD
  • Hi,
    was genau geht den nicht?

    Hatte dir mal eine Methode zum Kopieren von Dateien gegeben.
    Wenn du eine Datei Kopieren willst darf sie nicht benutz werden.
    Das heißt du must deine Datenbank schiesen und dann Kopieren und dann die DB wieder öffnen.

    Das mit den Prmission ist Voraussetzung.
    Hast du auch daran gedacht das es ab Android 6.0 ein neues Prmission System gibt.
    Da reicht es nicht mehr nur in der Manifestdatei die Prmission zu setzen.

    Kompiliere es mal für Android 5.1 da reichen die Manifest Prmission aus.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • hier ein build.gradle ( App) für ein Android 5.1

    compileSdkVersion 22und dependencies anpassen

    Quellcode

    1. apply plugin: 'com.android.application'
    2. android {
    3. compileSdkVersion 22
    4. buildToolsVersion '26.0.2'
    5. defaultConfig {
    6. applicationId "de.panjutorials.downloadingimages"
    7. minSdkVersion 22
    8. targetSdkVersion 22
    9. versionCode 1
    10. versionName "1.0"
    11. }
    12. buildTypes {
    13. release {
    14. minifyEnabled false
    15. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    16. }
    17. }
    18. sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/2'] } }
    19. }
    20. dependencies {
    21. compile fileTree(dir: 'libs', include: ['*.jar'])
    22. testCompile 'junit:junit:4.12'
    23. compile 'com.android.support:appcompat-v7:22.2.+'
    24. compile 'com.android.support:design:22.2.+'
    25. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P
  • wie gesagt teste einfach mal mit dem gradle File für Android 5.1 . Mit dem neuen System wirst du dich auseinandersetzen müssen. Für einen schnellen Test einfach das Build.cradle anpassen.
    Um das alte System zu benutzen ist es wichtig auf 5.1 zu kompilieren auf welchen System getestet wird ist gleich.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hey

    also es läuft jetzt unter Android 6.
    Nun aber ein anderes Problem. Wenn ich Android 5 ebenso verwenden möchte und die Version wieder umstelle, dann funktioniert es ja wieder nicht - bzw. "checkSelfPermission" und "requestPermissions" geht nicht mehr = Fehler beim Debug
    Gibt es da eine Möglichkeit für Android 6 den einen Weg und für Android 5 einen anderen in der selben App zu verwenden.


    ich habe die Version hier umgestellt - ich hoffe das ist der richtige Weg



    Quellcode

    1. if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
    2. {
    3. requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
    4. }


    Quellcode

    1. File data = Environment.getDataDirectory();
    2. File sd = new File(Environment.getExternalStorageDirectory()+"/TT_Training");
    3. if(!sd.exists()){
    4. sd.mkdirs();
    5. }
    6. try {
    7. if (sd.canWrite()) {
    8. String currentDBPath = DB_USER_PATH + DB_NAME;
    9. String backupDBPath = "Backup_tt_database.db";
    10. File currentDB = new File(data, currentDBPath);
    11. File backupDB = new File(sd, backupDBPath);
    12. if (currentDB.exists()) {
    13. FileChannel src = new FileInputStream(currentDB).getChannel();
    14. FileChannel dst = new FileOutputStream(backupDB).getChannel();
    15. dst.transferFrom(src, 0, src.size());
    16. src.close();
    17. dst.close();
    18. display("Backup", "Backup OK");
    19. }
    20. }
    21. } catch (Exception e) {
    22. // Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
    23. }
    Alles anzeigen
  • war einfacher als gedacht.
    Mal hoffen das dies so funktioniert wie gehofft.

    Quellcode

    1. int BuildVersion=Integer.valueOf(android.os.Build.VERSION.SDK_INT);
    2. if (BuildVersion > 22)
    3. {
    4. if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    5. requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
    6. } else {
    7. doIt();
    8. }
    9. }
  • Hi
    ich stelle die Kompil Version immer von Hand im build.cradle um geht bestimmt auch in der ProjektStructure.

    Wenn du das neue System (API23) benutzt solte es in allen Adroid Versionen laufen wenn es unter API23 oder höer Kompiliert wird.
    habe hier schon mal ein beispiel für die Pre Permission gegeben

    Wie nutze ich eine .txt Datei von außerhalb meiner App?
    Ein Feedback auf Tipps ist auch schön. :P
  • Danke wie immer für deine super Antworten.
    Jetzt war ich gerade dabei zu schreiben, dass ich immer noch Probleme mit einigen speziellen Virtual Devices habe.
    Kurz bevor ich es losschicken wollte hab ich nochmal vorsichtshalber etwas getestet und siehe da es hat alles funktioniert.
    Keine Ahnung warum - vielleicht hat die Pause und der Neustart von Android Studio geholfen. Vorher war die SDCard bei der Abfrage unter API22 auf notmounted.

    Gruß :thumbsup: