Android 6: Wie importiert man eine Datei per SD-Karte?

OP #5115451
Lesenswert?

Ich will eine Datei mit Testdaten auf die SD-Karte schreiben und die 
dann aus meiner Applikation einlesen.

Schreiben geht mit dem Linux-Filemanager (hier: Caja auf Mint 17) über 
USB problemlos, nur sieht die App auf dem Phone die Datei ums Verrecken 
einfach nicht, selbst wenn sie in einem (selbst angelegten) 
/Android/<app>/files - Verzeichnis liegt.

Den Pfad der SD-Karte frage ich mit getExternalFilesDir ab - das sieht 
erst mal gut aus. Nur die verdammte Datei findet er nicht.

WRITE_EXTERNAL_STORAGE Permission ist gesetzt.

Wie muss man das machen? (Per Assets kann ich es, ich will es aber aus 
einer normalen Datei machen und nicht jedesmal mit dem APK auf das Gerät 
kopieren.)
#5115717
Lesenswert?

Hab noch keine App geschrieben, aber vielleicht kann ich dir auch so 
helfen.

Was für ein Dateisystem hat die SD-Karte? (Fat oder EXT3/4)

Wenn es EXT3 oder 4 sein sollte: Schau mal nach ob die Leserechte 
gesetzt sind. Also vom Android-System auf dem Telefon über ein Terminal 
mal "ls -l" eingeben. Auch die Leserechte des übergeordneten Ordners 
überprüfen, vielleicht hakt es ja da.
OP #5115812
Lesenswert?

Das Dateisystem von Android ist nur noch grob ähnlich dem, was man von 
Linux kennt und die Sicherheitsphilosophien sind sehr unterschiedlich. 
Linux-Wissen ist zwar bei der Einarbeitung nützlich, ist aber nicht 
direkt auf Android anwendbar.

Die SD-Karte sollte über /sdcard zugreifbar sein:
1
$ ls -l /sdcard
2
  lrwxrwxrwx root root 2014-02-17 20:56 sdcard -> /storage/self/primary
3

4
$ ls -l /storage/self/primary
5
  lrwxrwxrwx root root 2014-02-17 20:56 primary -> /mnt/user/0/primary
6

7
$ ls -l /storage/emulated/0
8
  ...
9
  drwxrwx--x root sdcard_rw 2017-08-12 17:19 Download
10
  ...

Der Inhalt des Download-Verzeichnisses ist völlig anders, als das, was 
Caja unter mtp://[usb:001,004]/Card anzeigt. Weiß der Henker, was das 
Teil da zusammengelinkt hat...
#5115828
Lesenswert?

Vielleicht hift der Hinweis, daß es unter Android immer "zwei SD-Karten" 
gibt. Eine mit dem System selbst (Altlast aus den Tagen, als Linux & Co 
nur sinnvoll via SD-Karte auf den Windows-CE-Geräten bootbar war) und 
eine SD-Karte, die tatsächlich ein Wechseldatenträger ist.
Imho /sdcard und /ExtSD oder so.

Test: erzeuge mit Boardmitteln eine beliebige Datei (z.B. Foto) und 
verschiebe die mit FileCommander oder ähnlichen Tools in dein 
Files-Verzeichnis. Schau, ob du diese Datei aus deiner App sehen kannst 
(getDirFiles reicht. du musst sie nicht öffnen können).
Überprüfe dann (die SD-Karte am Linux-PC steckend), die Rechte der Datei 
und erstelle deine Testdaten entsprechend.
Mtp ist übrigens kein vollständig transparenter Dateidienst.
Beitrag #5115912 wurde von einem Moderator gelöscht.
OP #5115926
Lesenswert?

Es gibt einem Mountpoint unter /mnt/storage/extSdCard, darüber kommet 
adb nicht an die Karte:
1
$ ls -l /mnt/storage/extSdCard 
2
/mnt/storage/extSdCard: No such file or directory

Andererseits kann ich sie aber per Cajy am PC zugreifen. (Den Factory 
Reset hat sie unverändert überstanden.)
1
Environment.getExternalStorageDirectory().getPath()
liefert "/storage/emulated/0" zurück - daran habe ich mir schon 
erfolglos die Zähne ausgebissen...
#5115955
Lesenswert?

Uhu U. schrieb:
> liefert "/storage/emulated/0" zurück

Das ist bei mir auch der interne Speicher, dort liegen bei mir die 
ganzen Ordner. Also DCIM, Documents, Download usw.

Also nicht der root-Ordner "/" oder so, nur der Teil wo man eben selbst 
drauf zugreifen kann.

Vielleicht ein Hinweis:
Mein anderes Handy habe ich mit einer App genutzt mit der ich über W-Lan 
(thetering) auf die Daten zugreifen konnte. Die App hat aber external 
und internal Storage vertauscht angezeigt. Wenn ich den external Storage 
auslesen wollte (meine SD-Karte, wo all meine Daten drauf sind), dann 
bin ich in dieses OS-Dateisystem gekommen.
Wenn ich mir internal Storage anzeigen ließ hatte sah ich meine 
SD-Karte.

Gibt es auch eine Funktion 
"Environment.getInternalStorageDirectory().getPath()" ?
Was liefert die zurück?
OP #5115985
Lesenswert?

Jetzt gibts "nur" noch ein Permission denied:
1
/storage/AFF8-1DF5/Download/file.txt: open failed: EACCES (Permission denied)

Die Datei im ls -l:
1
-rwxrwx--x root     sdcard_rw  5223412 2017-08-18 23:21 file.txt

Da ist wieder irgend so eine Sicherheitsscheiße im Spiel...

Ein chmod 777 file.txt weist er mit "Operation not permitted" ab.
OP #5116068
Lesenswert?

A. K. schrieb:
> Es geht evtl schon, nur muss die App das Recht ausdrücklich
> erfragen.

Die in Frage kommenden Rechte habe ich der App gegeben - hilft nix.

Über die (simulierte) sdcard steht in der Dokumentation, dass dort kein 
Zugriffsschutz bestehen würde. Die echte SD-Karte wird sehr 
stiefmütterlich behandelt - es wird spekuliert, das läge daran, dass 
Google Smartphones keine SD-Sockel haben.

Irgend so ein hirnverbrannter Schwachsinn wirds wohl sein.
#5116201
Lesenswert?

Da war doch noch was ... ach ja, meine Androiden fragen mich beim ersten 
schreibenden Zugriffsversuch auf einen via OTG-Adapter angeschlossenen 
USB-Stick oder SD-Kartenleser immer(?), ob ich den Zugriff erlauben 
will. Kann sein, dass das bei der SD-Karte auch passiert. Da mag ich nur 
nicht mehr rumspielen, weil sonst wieder alle Playlists für die Musik 
auf der SD-Karte weg sind.
#5116225
Lesenswert?

Ich habe auch Android 6.0.1 auf meinem Telefon (China-Marke), aber bei 
mir geht das alles.
Wenn du ein Dokument (DOC-Datei, Bild, pdf oder so) auf dem Telefon 
erstellst musst du es doch auch speichern/lesen können ... alles andere 
wäre ja total sinnlos. XD

Es sei denn die wollen dass man nur mit Dateien in der (ge-)klaut 
arbeitet.
Durch unser sehr mieses mobiles Internet hier (wenig bis kein Empfang) 
ist so etwas für mich aber eh nicht nutzbar.
#5116237
Lesenswert?

IMHO kann eine Anwendung bei neueren Androids maximal auf ihr eigenes 
Verzeichnis zugreifen, vielleicht noch auf ein paar übliche Verdächtige 
wie Downloads, und muss sich den Zugang zu anderen Verzeichniss(bäumen) 
einmalig vom Anwender per Filebrowser freigeben lassen. So jedenfalls 
verhalten sich diverse Anwendungen.

Von Bedeutung scheint mir hier die erforderliche Anwender-Aktion. Also 
dass das nicht die App automatisch selbst bestimmen kann, wo sie gerne 
schnüffeln würde. Datenschutz.
OP #5116809
Lesenswert?

A. K. schrieb:
> Und hier für Android 6:
> 
https://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card

Danke, das habe ich gesucht...

Die Dokumentation von Android ist wirklich super. Auf ein Problem stoße 
ich dabei aber immer öfter: man findet vieles, was auf Deutsch gesagt 
mittlerweile Kalter Kaffee ist. Das Datum der Beiträge kann zwar helfen, 
sich über die Relevanz der Fundstücke ein Bild zu machen, aber 
zuverlässig ist das leider nicht.

Aber wenn ich die Doku von Android mit der von PocketPC vergleiche: da 
liegen Welten dazwischen...
OP #5119460
Lesenswert?

A. K. schrieb:
> Schon mal selinux verwendet? Das macht erst richtig Spass.

Kleiner Ausschnitt aus einem find-Listing des S5:
1
./sys/fs/selinux/policy_capabilities
2
./sys/fs/selinux/policy_capabilities/open_perms
3
./sys/fs/selinux/policy_capabilities/network_peer_controls
4
./sys/fs/selinux/class
5
./sys/fs/selinux/class/drmservice
6
...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren