Android M écrire sur Carte SD - Autorisation Refusée

Je suis en train de copier le fichier à partir de l'intérieur de mon application vers la carte SD, mais je reçois l'erreur eacces (permission denied). Le système d'exploitation est Android M et I ont permis d'exécution de Stockage des autorisations (vérifié dans l'app info). J'ai aussi mis les uses-permission AndroidManifest.xml

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

Ne fonctionne pas si je l'ai copier sur la carte SD

Source: data/user/0/com.example.myapp/cache/SomeFile.txt
Destination: /storage/1032-2568/SomeFolder/
Error: java.io.FileNotFoundException: /storage/1032-2568/SomeFolder/SomeFile.txt: open failed: EACCES (Permission denied)

Fonctionne si je copie de la mémoire de stockage interne

Source: data/user/0/com.example.myapp/cache/SomeFile.txt
Destination: /storage/emulated/0/SomeFolder/

Code à copier le fichier de la source à la destination

/*
 * Below are the parameters I have tried
 *
 * inputPath - data/user/0/com.example.myapp/cache or data/user/0/com.example.myapp/cache/
 * inputFile - /SomeFile.txt or SomeFile.txt
 * outputPath - /storage/1032-2568/SomeFolder/or /storage/1032-2568/SomeFolder
 */
public static void copyFile(String inputPath, String inputFile, String outputPath) {

    InputStream in = null;
    OutputStream out = null;
    try {

        //create output directory if it doesn't exist
        File dir = new File (outputPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        in = new FileInputStream(inputPath + inputFile);
        out = new FileOutputStream(outputPath + inputFile);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();


        //write the output file (You have now copied the file)
        out.flush();
        out.close();
    }
    catch (FileNotFoundException fnfe1) {
        /* I get the error here */
        Log.e("tag", fnfe1.getMessage());
    }
    catch (Exception e) {
        Log.e("tag", e.getMessage());
    }
}

ES Explorateur de Fichiers

J'ai vu que ES File Explorer ne peut pas écrire quoi que ce soit sur la Carte SD sur le Redmi appareils. Voici une vidéo avec la solution. En suivant les étapes travaillé pour ES Explorer sur mon appareil. Cela peut être fait par programmation?

Je pense que vous avez besoin de : <uses-permission android:name="android.la permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.la permission.WRITE_EXTERNAL_STORAGE" />
N: WRITE inclut implicitement les READ, par conséquent, il n'est pas nécessaire.
Je lui ai permis de Stockage des autorisations à l'aide d'Exécution des autorisations.
Vous n'avez pas la permission d'écrire à divers endroits sur stockage amovible. Utiliser l'espace de Stockage Cadre d'Accès.
D'accord avec ce que CommonsGuy dit. C'est le problème avec l'emplacement que vous essayez d'écrire. Pouvez-vous essayer cet Environnement.getExternalStorageDirectory().toString()+ "/YourFolder", comme le chemin de la sortie?

OriginalL'auteur Sahil Khanna | 2017-03-28