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ß


    Code
    File sd = new File(Environment.getExternalStorageDirectory()+"/test");
            if(!sd.exists()){
                sd.mkdirs();
            }
    //        
                try {
    
    
                    if (sd.canWrite()) {
                        //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.

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


    compileSdkVersion 22und dependencies anpassen

  • 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.

  • 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



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


  • war einfacher als gedacht.
    Mal hoffen das dies so funktioniert wie gehofft.

    Code
    int BuildVersion=Integer.valueOf(android.os.Build.VERSION.SDK_INT);
            if (BuildVersion > 22)
            {
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
                } else {
                    doIt();
                }
            }
  • 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ß :thumbup:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!