Datei schreiben auf Android 4.0 und Android 4.4

  • 4 Antworten
  • Letztes Antwortdatum
N

Nemolus

Ambitioniertes Mitglied
1
Hi,

in meiner App kann man Dateien Erzeugen oder bestehende Editieren. Seit Android 4.4 KitKat habe ich jetzt das Problem, dass eine App nicht mehr "frei" auf dem Internal bzw. SDCard speichern kann.

In Android 4.4 hätte ich ja die Möglichkeit mittels der API19 auf den "Document Storage" zu zugreifen. Aber da meine App auch noch mind. auf Android 4.0 Geräten verwendet wird, kann ich diese Api nicht einsetzen.

Ich bin gerade dabei mir eine Methode zu bauen, die auf Schreibzugriff prüft (mit dem SDCard fix geht es ja auch auf 4.4) und mir dann einen entsprechenden Pfad zurück geben soll. Ich bin aber im moment ratlos, wie ich das umsetzen kann, dass ich auf einem 4.0 Device den Code verwenden kann, und bei 4.4 und dem Schreibschutz auf die 19erApi zurückgreifen kann.

Habt Ihr einen Tipp für mich?
 
Code:
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
    // benutze Storage Access Framework
} else{
    // schreibe wie vorher
}
 
  • Danke
Reaktionen: Nemolus
Danke für das Sample.

Kann ich hier die 19erApi verwenden und im Manifest als MinSDK die 16erApi angeben, ohne dass es dann zur Laufzeit knallt?

Ich muss ja um die 19er verwenden zu können, auch gegen die 19er bauen. Sonst kennt er die Konstante "Environment.DIRECTORY_DOCUMENTS" nicht.

Oder habt Ihr eine Idee, wie man unter KitKat am besten eine Datei anlegen/abspeichern kann?
 
Ja natürlich geht das, ohne dass es zur Laufzeit knallt. Du musst nur alles was API 19 verwendet in die obere Klammer des if-Statements machen, dann wird es nur ausgeführt, wenn man auch >= API19 ist.
Vielleicht noch etwas zur Eklärung: Die Anweisung "android.os.Build.VERSION_CODES.KITKAT" wird vom Compiler direkt durch die Konstante ersetzt, damit ist es egal ob diese Konstante im Framework auf dem Handy existiert oder nicht. Zur Laufzeit wird das sowas wie if (16 >= 19) ...
Das ist gängige Praxis mit solchen Konstrukten Features höherer APIS zu verwenden. Btw. ist es auch gängige Praxis als compileSdk und targetSdk das höchste aktuell verfügbare zu wählen. Nur bei minSdk schreibt man das hin was man mindestens unterstützen möchte.
 
  • Danke
Reaktionen: Nemolus
Dank Dir für die Background Info und dass Du Dir für mein Problem Zeit genommen hast :thumbsup:
 

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
488
AnnaBauer21
AnnaBauer21
D
Antworten
8
Aufrufe
764
jogimuc
J
S
Antworten
7
Aufrufe
1.202
Silvasurf
S
AnnaBauer21
Antworten
6
Aufrufe
989
AnnaBauer21
AnnaBauer21
M
Antworten
21
Aufrufe
1.362
swa00
swa00
Zurück
Oben Unten