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ß
database Backup - storage/emulated/0
-
-
-
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
Code
Alles anzeigenapply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion '26.0.2' defaultConfig { applicationId "de.panjutorials.downloadingimages" minSdkVersion 22 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/2'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:22.2.+' compile 'com.android.support:design:22.2.+' }
-
Ich werde mich jetzt mal mit dem neuen Permission System auseinandersetzen.
Geb dann bescheid ob es geklappt hat. -
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
Codeif (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); }
Code
Alles anzeigenFile data = Environment.getDataDirectory(); File sd = new File(Environment.getExternalStorageDirectory()+"/TT_Training"); if(!sd.exists()){ sd.mkdirs(); } try { if (sd.canWrite()) { String currentDBPath = DB_USER_PATH + DB_NAME; String backupDBPath = "Backup_tt_database.db"; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); if (currentDB.exists()) { FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); display("Backup", "Backup OK"); } } } catch (Exception e) { // Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); }
-
war einfacher als gedacht.
Mal hoffen das dies so funktioniert wie gehofft.Codeint 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(); } }
-
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 -
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ß
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!