IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Méthode d'accès à la mémoire externe obsolète


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Méthode d'accès à la mémoire externe obsolète
    Bonjour à toutes et à tous,

    Dans mon application, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static File defRep(String rep) {
            File sdCard = Environment.getExternalStorageDirectory();
            File dir = new File(sdCard.getAbsolutePath(), rep);
            dir.mkdir();
            return dir;
        }
    Mais il m'est dit que getExternalStorageDirectory(); est obsolète.

    Pour autant, je n'ai pas réussi à trouver par quoi remplacer cette instruction.

    Merci de votre aide.

    Pierre.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu as la solution dans la documentation :


    This method was deprecated in API level 29.
    To improve user privacy, direct access to shared/external storage devices is deprecated. When an app targets Build.VERSION_CODES.Q, the path returned from this method is no longer directly accessible to apps. Apps can continue to access content stored on shared/external storage by migrating to alternatives such as Context#getExternalFilesDir(String), MediaStore, or Intent#ACTION_OPEN_DOCUMENT.
    Il faut donc utiliser getExternalFileDir()
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par grunk Voir le message
    ... Il faut donc utiliser getExternalFilesDir()
    J'avais essayé cette solution, et je l'ai réessayée pour vérification. Elle donne accès à un répertoire "privé" Android/data/com.android.monapplication... qui est effacé si on désinstalle l'application.

    Ou alors, je n'ai pas compris comment utiliser cette instruction.

    Ce n'est pas ce que je cherche.

    Par ailleurs, je constate que d'autres applications doivent faire comme moi car elles ont leurs fichiers directement sous /storage/emulated/0/leurapplication/....

    Cordialement.

    Pierre.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Alors , je viens de mettre à jour une appli avec le même genre de problème que toi.

    A priori à partir d'android 10 l'accès aux fichiers est devenu très restreint voir impossible dans certains cas , en utilisant les méthodes traditionnels (getExternalFilesDir() ,etc ...)

    Pour android 10 tu peux continuer à utiliser
    Environment.getExternalStorageDirectory() et Environment.getExternalStoragePublicDirectory() en ajoutant à ton manifest l'instruction android:requestLegacyExternalStorage="true"Ceci étant dit ce n'est que repousser le problème ...

    La solution est désormais soit d'écrire dans le dossier privé de ton application , soit d'utiliser le Storage Access Framework : https://developer.android.com/traini...ocuments-files qui fait passer l'utilisateur par un File picker géré par le système et qui donne temporairement le droit à l'application de lire ou écrire le fichier.

    Tu as ici : https://www.techotopia.com/index.php...mework_Example un exemple complet de lecture / ecriture de fichier utilisant ce composant devenu quasi obligatoire.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par grunk Voir le message
    ... Tu as ici : https://www.techotopia.com/index.php...mework_Example un exemple complet de lecture / ecriture de fichier utilisant ce composant devenu quasi obligatoire.
    Merci "grunk" pour ces explications et ces liens.

    Je viens de mettre en œuvre l'exemple du dernier lien : ça fonctionne bien et je peux même écrire/lire sur la carte SD additionnelle !

    Pour autant, à chaque commande, cela ouvre des boîtes de dialogue me demandant où et quel fichier je veux traiter.

    Tout cela semble lié aux divers possibilités de l'intent. Par exemple ceux qui sont utilisés : Intent.ACTION_OPEN_DOCUMENT ; Intent.CATEGORY_OPENABLE.

    Dans mon application, je ne me vois pas devoir recourir à ces dialogues à chaque fois que j'utilise un fichier. Je suppose qu'il doit y avoir des options qui permettent de les éviter, mais parmi la kyrielle d'options proposées, je ne sais vraiment pas où me diriger. En as-tu une idée ?

    Cordialement.

    Pierre.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il est à priori possible de persister la permission d'utiliser un fichier :
    https://developer.android.com/traini...st-permissions
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/05/2012, 17h01
  2. Accés à une dll externe
    Par syrio dans le forum C++
    Réponses: 5
    Dernier message: 07/04/2006, 23h23
  3. [c#] Méthode d'accès aux objets de ma form1
    Par SDuh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/03/2006, 11h21
  4. Réponses: 4
    Dernier message: 16/02/2006, 17h45
  5. Acces à la mémoire
    Par Ulmo dans le forum C
    Réponses: 5
    Dernier message: 15/10/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo