EACCESS Zugriff verweigert in Android

7

Beim Schreiben der Datei auf der externen SD-Karte erhalte ich die Fehlermeldung, dass die EACCESS-Berechtigung verweigert wurde. Ich habe die Erlaubnis gesetzt %Code% Aber wenn ich die Datei lese, kann ich die Datei zwar lesen, aber nicht schreiben. Der Code, den ich zum Schreiben der Datei auf der SD-Karte verwende, ist:

%Vor%

Der Pfad für die externe Speicherkarte ist <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> . Deshalb kann ich mnt/extsd/ nicht verwenden, was mir einen Pfad Environment.getExternalStorageDirectory().getAbsolutePath() gibt und dieser Pfad ist für den internen Speicherpfad in meinem Tablet. Bitte schlagen Sie vor, warum dies so ist, wie kann ich das lösen

    
CodingDecoding 12.10.2012, 06:51
quelle

4 Antworten

13

Wie ich mich erinnere, bekam Android seit Honeycomb eine partielle Unterstützung für mehrere Speicher, und der primäre Speicher (derjenige, den Sie von Environment.getExternalStorageDirectory erhalten, normalerweise ein Teil der internen eMMC-Karte) ist immer noch durch die Berechtigung WRITE_EXTERNAL_STORAGE geschützt Die sekundären Speicher (wie die echte austauschbare SD-Karte) sind durch eine neue Berechtigung android.permission.WRITE_MEDIA_STORAGE geschützt, und die Schutzstufe ist signatureOrSystem, siehe auch die Diskussion in dieser Artikel .

Wenn das der Fall ist, dann scheint es für eine normale App unmöglich zu sein, irgendetwas auf die echte SD-Karte ohne eine Plattform-Signatur zu schreiben ...

    
Ziteng Chen 12.10.2012, 07:05
quelle
7

Ab API-Stufe 19 Google hat die API hinzugefügt .

  • Context.getExternalFilesDirs()
  • Context.getExternalCacheDirs()
  • Context.getObbDirs()

Apps dürfen nicht auf sekundären externen Speichergeräten schreiben, außer in ihren paketspezifischen Verzeichnissen, die von synthetischen Berechtigungen zugelassen werden. Durch die Beschränkung der Schreibvorgänge auf diese Weise wird sichergestellt, dass das System Dateien bereinigen kann, wenn Anwendungen deinstalliert werden.

Es folgt die Vorgehensweise, um ein anwendungsspezifisches Verzeichnis auf einer externen SD-Karte mit absoluten Pfaden zu erhalten.

%Vor%

Die Protokollausgabe von oben sieht folgendermaßen aus:

%Vor%     
Sachin 05.03.2014 14:53
quelle
0

Ich habe dieses Problem gelöst, indem ich android:maxSdkVersion="18" in uses-permission entfernt habe in der Manifestdatei. I.e. benutze das:

%Vor%

anstelle von:

%Vor%     
satya522 20.09.2014 10:35
quelle
0

Überprüfen Sie, ob der Benutzer eine externe Speicherberechtigung hat oder nicht. Wenn nicht, dann benutze das Cache-Verzeichnis zum Speichern der Datei.

%Vor%     
Aatish Mittal 16.11.2016 06:12
quelle

Tags und Links