2016-10-29 1 views
0

Nach unzähligen Suchen habe ich es geschafft, den Pfad zu meiner SD-Karte nicht den android emulierten Speicher zu finden. Aber wenn ich versuche es .txt Ordner machen es endet mit FehlerSpeichern von Datei auf SD-Karte mit Erlaubnis Fehler

/storage/37F0-1515/DCIM/100MEDIA/test.txt: open failed: EACCES (Permission denied) 

Ich weiß nicht, warum, weil ich Berechtigungen für

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

und auch habe ich die Berechtigungen aktiviert mit

Hier
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, request2); 
    } 

ist der Code, den ich verwende

File sdCard = new File("/storage/37F0-1515/DCIM/100MEDIA"); 
    File dir = new File(sdCard.getAbsolutePath()); 


    if (!dir.exists()) { 
     dir.mkdirs(); 
    } 

    final File file = new File(dir, "test" + ".txt"); 
    try { 
     BufferedWriter bufferedWriter = null; 
     bufferedWriter = new BufferedWriter(new FileWriter(file)); 
     bufferedWriter.write("test"); 
     bufferedWriter.close(); 
    } 
    catch(Exception e){Log.v("myApp", e.toString());} 

Ich weiß nicht, warum Android mich nicht auf sdcard schreiben lassen wird. Benötige ich weitere Berechtigungen?

+0

Ist es Android 6? – FadedCoder

Antwort

-1

Versuchen Sie diese Methoden-

  1. prüfen zu verwenden, wenn die uses-permission Aussagen an der richtigen Stelle sind, werden sie unter <manifest> und über <application> Tags sein sollte. Das richtige Format -

    <manifest> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ... <application> ... <activity> ... </activity> </application> </manifest>

  2. von Android Kitkat starten, gibt es eine neue Speicherrichtlinie -

Die WRITE_EXTERNAL_STORAGE Erlaubnis nur Schreibzugriff auf den primären externen Speicher auf eine gewähren müssen Gerät. Apps dürfen nicht auf sekundären externen Speichergeräten schreiben, außer in ihren paketspezifischen Verzeichnissen, die von den 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.

T sein kann aber ohne Verwurzelung ausgenutzt werden (obwohl ich diese nicht versucht haben), als mentioned here

EDIT -

Die oben genannten Exploit für Android nicht funktionieren 5+. Es gibt keine Standardlösung für dieses Problem. Einige Exploits sind möglicherweise verfügbar, aber sie sind gerätespezifisch/nicht zuverlässig/root-access-abhängig. Tools wie das Storage Access Framework können jedoch verwendet werden.

+0

Diese Technik funktioniert nicht ab Android 5.0. Dieser Code - nachdem die fehlenden Teile ausgefüllt sind - scheitert mit einer Ausnahme aufgrund fehlender "WRITE_MEDIA_STORAGE" -Erlaubnis. Diese Erlaubnis ist "Unterschrift | privilegiert", die gewöhnliche Android SDK-Anwendungen nicht halten können. – CommonsWare

0

Ich weiß nicht, warum, weil ich Berechtigungen für

Diese Berechtigungen für external storage sind, nicht removable storage.

Ich weiß nicht, warum android lassen mich nicht

Sie haben Zugriff beliebigen Dateisystem auf Wechselspeicher auf Android nicht sdcard schreiben 4.4+.

+0

Also der einzige Zugriff auf Wechseldatenträger hat Google selbst und die Handyhersteller ... super. Trotzdem danke für die Hilfe. – Lowrider

+0

@Lowrider: Nein, das einzige * beliebige Dateisystem * Zugriff auf Wechselspeicher ist für Google selbst und Gerätehersteller. Sie können gerne Methoden wie 'getExternalFilesDirs()' (beachten Sie die Mehrzahl) verwenden, um * von Android bereitgestellte * Speicherorte auf Wechseldatenträgern zu erhalten, mit denen Sie normale Datei-E/A verwenden können. Oder verwenden Sie [das Storage Access Framework] (https://developer.android.com/guide/topics/providers/document-provider.html), um dem Benutzer zu ermöglichen, mit der Uri, die Sie erhalten, auszuwählen, wo er Dinge speichern soll zurück zum Öffnen von Streams zum Lesen und Schreiben. – CommonsWare

Verwandte Themen