Accès à la carte SD

Toutes les questions sur le développement Mobile, y compris la partie script.
Ludo59146
Messages : 8
Inscription : 29 Fév 2024 19:18

Accès à la carte SD

Message par Ludo59146 » 07 Mars 2024 10:19

Bonjour,

J'ai besoin d'accéder aux fichiers "non multimedias" dans la carte SD de ma tablette, pour ce faire j'utilise le code suivante avec API level 29 :

Code : Tout sélectionner

        if (Application.platform == RuntimePlatform.Android)
        {
            AndroidJavaObject storageHelper = new AndroidJavaObject("com.picovr.androidhelper.StorageHelper");

            //Get current activity
            AndroidJavaObject activityContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
            .GetStatic<AndroidJavaObject>("currentActivity");
            //Must call "init" method before call other interface.
            storageHelper.Call("init", activityContext);
            //Call the interface.
            string sdCardPath = storageHelper.Call<string>("getSDCardPath");
            if (!string.IsNullOrEmpty(sdCardPath))
            {




                folderPath = System.IO.Path.Combine(sdCardPath, "folderTest");
                if (!Directory.Exists(folderPath))
                {
                    try
                    {
                        Debug.Log(debugHeader + "create folder : " + folderPath);
                        Directory.CreateDirectory(folderPath);
                    }
                    catch (System.Exception e)
                    {
                        Debug.LogError(debugHeader + "create folder error : " + e.Message);
                    }

                }
            }
        }
 
ainsi que le manifest suivant :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
  <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" />
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:requestLegacyExternalStorage="true">
          <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>
Je déploie ce code sur deux tablettes, l'une sous Android 11 et l'autre sous Android 13.



Je me retrouve avec deux situations différentes:

Sous Android 11:
J'accède bien aux fichiers multimedias mais pas les autres.
Dans ce cas de figure je suis obligé d'aller dans les paramètres tablette /application/MonApplication/autorisations/stockage pour venir cocher "Autoriser la gestion de tous les fichiers" à la place de "Autoriser l'accès aux fichiers multimédias uniquement"
Ensuite mon application fonctionne parfaitement.

Sous Android 13:
Impossible d'accéder à la carte SD

Auriez vous une méthode simple qui me permettrai d'accéder aux fichiers "non multimédias" dans la carte SD quelque soit la version d'Android ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Accès à la carte SD

Message par boubouk50 » 07 Mars 2024 10:42

Dans ton code, le max en écriture est à 28 (Android 11). Donc pas plus haut.

Code : Tout sélectionner

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
Et le min en lecture est à 30 (Android 13). Donc pas plus bas.

Code : Tout sélectionner

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" />
Teste déjà avec les 2 min à 28 pour n'autoriser que Android 11 et +.
Mais pour moi, la solution est là, avec les permissions.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ludo59146
Messages : 8
Inscription : 29 Fév 2024 19:18

Re: Accès à la carte SD

Message par Ludo59146 » 07 Mars 2024 11:38

Merci pour ce retour rapide, j'ai modifié mon manifest:

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:minSdkVersion="28" />
  <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="28" />
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:requestLegacyExternalStorage="true">
          <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

le problème reste identique

sous Android 11
Screenshot_20230308-094344_Permission controller.jpg
Screenshot_20230308-094344_Permission controller.jpg (190.96 Kio) Consulté 456 fois

sous Android 13
sdCardPath ne retourne rien

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Accès à la carte SD

Message par boubouk50 » 07 Mars 2024 12:07

Perso, je ne suis plus dans la course au dev mobile depuis Android 9, donc je ne suis plus à jour depuis trop longtemps pour savoir de quoi il retourne. Les sécurités sont heureusement plus fortes, ça permet aux devs de revoir leurs besoins réels.
Sinon, est-ce que la classe storageHelper est à jour ? Sur le git de picoVR, la dernière version JAVA date de 3 ans, or Android 12 et 13 n'étaient pas encore sortis. Si les protocoles/restrictions ont changé, alors il faudra revoir ce code ou changer de méthode.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ludo59146
Messages : 8
Inscription : 29 Fév 2024 19:18

Re: Accès à la carte SD

Message par Ludo59146 » 07 Mars 2024 12:24

En effet le storageHelper est ancien mais je n'arrive pas à trouver d'autres méthodes.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »