Comment autoriser l'accès au stockage externe. Accès au stockage externe - développement de jeux pour Android OS. Obtention des autorisations pour le stockage externe

Android utilise un système de fichiers similaire aux systèmes de fichiers sur disque sur d'autres plates-formes. Cette page décrit comment utiliser le système de fichiers Android pour lire et écrire des fichiers avec les API.

Choisissez le stockage interne ou externe

Tous les appareils Android disposent de deux zones de stockage de fichiers : le stockage « interne » et « externe ». Ces noms proviennent des débuts d'Android, lorsque la plupart des appareils offraient une mémoire non volatile intégrée (stockage interne), ainsi qu'un support de stockage amovible tel qu'une carte micro SD (stockage externe). De nombreux appareils divisent désormais l'espace de stockage permanent en partitions « internes » et « externes » distinctes. Ainsi même sans support de stockage amovible, ces deux espaces de stockage existent toujours, et le comportement de l'API est le même que le stockage externe soit amovible ou non.

Le stockage externe pouvant être amovible, il existe certaines différences entre ces deux options, comme suit.

Conseil: Bien que les applications soient installées par défaut sur le stockage interne, vous pouvez autoriser l'installation de votre application sur un stockage externe en spécifiant l'attribut dans votre manifeste. Les utilisateurs apprécient cette option lorsque la taille de l'APK est très grande et qu'ils disposent d'un espace de stockage externe plus grand que le stockage interne. Pour plus d'informations, voir .

Enregistrer un fichier sur le stockage interne

Le répertoire de stockage interne de votre application est spécifié par le nom du package de votre application dans un emplacement spécial du système de fichiers Android accessible avec les API suivantes.

Sur Android 6.0 (API niveau 23) et versions antérieures, d'autres applications peuvent lire vos fichiers internes si vous définissez le mode de fichier pour qu'il soit lisible par tout le monde. Cependant, l'autre application doit connaître le nom de votre package d'application et les noms de fichiers. Les autres applications ne peuvent pas parcourir vos répertoires internes et n'ont pas d'accès en lecture ou en écriture, sauf si vous définissez explicitement les fichiers pour qu'ils soient lisibles ou inscriptibles. Ainsi, tant que vous utilisez vos fichiers sur le stockage interne, ils ne sont jamais accessibles aux autres applications.

Écrire un fichier cache

Si vous devez plutôt mettre en cache certains fichiers, vous devez utiliser . Par exemple, la méthode suivante extrait le nom de fichier de a et crée un fichier portant ce nom dans le répertoire de cache interne de votre application :

Kotlin

plaisir privé getTempFile(context: Context, url: String): Fichier ? = Uri.parse(url)?.lastPathSegment?.let ( nom de fichier -> File.createTempFile(nom de fichier, null, context.cacheDir) )

Java

private File getTempFile(Context context, String url) ( File file; try ( String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); ) catch ( IOException e) ( // Erreur lors de la création du fichier ) return file; )

Conseil: Si vous devez empaqueter un fichier dans votre application qui est accessible au moment de l'installation, enregistrez le fichier dans le répertoire res/raw/ de votre projet. Vous pouvez ouvrir ces fichiers avec , en transmettant l'ID de ressource du nom de fichier R.raw. Cette méthode renvoie un que vous pouvez utiliser pour lire le fichier. Vous ne pouvez pas écrire dans le fichier d'origine.

Ouvrir un répertoire

Vous pouvez ouvrir un répertoire sur le système de fichiers interne avec les méthodes suivantes :

Renvoie un représentant du répertoire sur le système de fichiers qui est associé de manière unique à votre application. Crée un nouveau répertoire (ou ouvre un répertoire existant) dans le répertoire du système de fichiers unique de votre application. Ce nouveau répertoire apparaît dans le répertoire fourni par . Renvoie un représentant du répertoire de cache sur le système de fichiers qui est associé de manière unique à votre application. Ce répertoire est destiné aux fichiers temporaires et doit être nettoyé régulièrement. Le système peut y supprimer des fichiers s'il manque d'espace disque, donc assurez-vous de vérifier l'existence de vos fichiers cache avant de les lire.

Pour créer un nouveau fichier dans l'un de ces répertoires, vous pouvez utiliser le constructeur en transmettant l'objet fourni par l'une des méthodes ci-dessus qui spécifie votre répertoire de stockage interne. Par exemple:

Kotlin

val directory = context.filesDir val file = Fichier (répertoire, nom de fichier)

Java

Répertoire de fichiers = context.getFilesDir(); Fichier fichier = nouveau fichier (répertoire, nom de fichier) ;

Enregistrer un fichier sur un stockage externe

L'utilisation du stockage externe est idéale pour les fichiers que vous souhaitez partager avec d'autres applications ou permettre à l'utilisateur d'accéder avec un ordinateur.

Demander des autorisations de stockage externe

Pour écrire sur le stockage externe public, vous devez demander l'autorisation dans votre :

... ...

À partir d'Android 4.4 (API niveau 19), la lecture ou l'écriture de fichiers dans le répertoire de stockage externe privé de votre application accessible à l'aide de -ne nécessite pas les autorisations ou. Ainsi, si votre application prend en charge Android 4.3 (API niveau 18) et versions antérieures, et vous souhaitez accéder uniquement au répertoire de stockage externe privé, vous devez déclarer que l'autorisation ne sera demandée que sur les versions inférieures d'Android en ajoutant l'attribut :

...

Vérifiez que le stockage externe est disponible

Étant donné que le stockage externe peut être indisponible, par exemple lorsque l'utilisateur a monté le stockage sur un PC ou a retiré la carte SD qui fournit le stockage externe, vous devez toujours vérifier que le volume est disponible avant d'y accéder. Vous pouvez interroger l'état du stockage externe en appelant . Si l'état renvoyé est , vous pouvez alors lire et écrire vos fichiers. Si c'est le cas, vous ne pouvez lire que les fichiers.

Par exemple, les méthodes suivantes sont utiles pour déterminer la disponibilité du stockage :

Kotlin

/* Vérifie si le stockage externe est disponible en lecture et en écriture */ fun isExternalStorageWritable(): Boolean ( return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED ) /* Vérifie si le stockage externe est disponible pour au moins lire */ fun isExternalStorageReadable( ): Booléen (retour Environment.getExternalStorageState() dans setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY) )

Java

/* Vérifie si le stockage externe est disponible en lecture et en écriture */ public boolean isExternalStorageWritable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) ( return true; ) return false; ) / * Vérifie si le stockage externe est disponible pour au moins lire */ public boolean isExternalStorageReadable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) ( renvoie vrai ; ) renvoie faux ; )

Enregistrer dans un répertoire public

Si vous souhaitez enregistrer des fichiers publics sur le stockage externe, utilisez la méthode pour obtenir un représentant du répertoire approprié sur le stockage externe. La méthode prend un argument spécifiant le type de fichier que vous souhaitez enregistrer afin qu'il puisse être organisé logiquement avec d'autres fichiers publics, tels que ou . Par exemple:

Kotlin

amusant getPublicAlbumStorageDir(albumName: String): Fichier ? ( // Récupère le répertoire du répertoire d'images publiques de l'utilisateur. val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) ( Log.e(LOG_TAG, "Répertoire non créé ") ) fichier de retour )

Java

public File getPublicAlbumStorageDir(String albumName) ( // Récupère le répertoire du répertoire d'images publiques de l'utilisateur. File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) ( Log. e(LOG_TAG, "Répertoire non créé"); ) fichier de retour; )

Si vous souhaitez masquer vos fichiers du Media Scanner, incluez un fichier vide nommé .nomedia dans votre répertoire de fichiers externes (notez le préfixe point dans le nom du fichier). Cela empêche le scanner multimédia de lire vos fichiers multimédias et de les fournir à d'autres applications via le fournisseur de contenu.

Enregistrer dans un répertoire privé

Si vous souhaitez enregistrer sur un stockage externe des fichiers privés pour votre application et non accessibles par le fournisseur de contenu, vous pouvez acquérir un répertoire utilisé uniquement par votre application en l'appelant et en lui transmettant un nom indiquant le type de répertoire que vous utilisez. j'aimerais. Chaque répertoire créé de cette manière est ajouté à un répertoire parent qui encapsule tous les fichiers de stockage externes de votre application, que le système supprime lorsque l'utilisateur désinstalle votre application.

Attention : les fichiers sur le stockage externe ne sont pas toujours accessibles, car les utilisateurs peuvent monter le stockage externe sur un ordinateur pour l'utiliser comme périphérique de stockage. Ainsi, si vous devez stocker des fichiers essentiels aux fonctionnalités de votre application, vous devez plutôt les stocker sur .

Par exemple, voici une méthode que vous pouvez utiliser pour créer un répertoire pour un album photo individuel :

Kotlin

amusant getPrivateAlbumStorageDir (contexte : Contexte, albumName : String) : Fichier ? ( // Obtenez le répertoire du répertoire d'images privé de l'application. val file = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) ( Log.e(LOG_TAG, "Directory non créé") ) fichier de retour )

Java

public File getPrivateAlbumStorageDir(Context context, String albumName) ( // Récupère le répertoire du répertoire d'images privé de l'application. File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs( )) ( Log.e(LOG_TAG, "Répertoire non créé"); ) fichier de retour; )

Si aucun des noms de sous-répertoire prédéfinis ne convient à vos fichiers, vous pouvez appeler et transmettre null . Cela renvoie le répertoire racine du répertoire privé de votre application sur le stockage externe.

Kotlin

monFichier.delete()

Java

monFichier.delete();

Si le fichier est enregistré sur la mémoire interne, vous pouvez également demander au de localiser et supprimer un fichier en appelant :

Kotlin

monContext.deleteFile(fileName)

Java

monContext.deleteFile(fileName);

Note: Lorsque l'utilisateur désinstalle votre application, le système Android supprime les éléments suivants :

  • Tous les fichiers que vous avez enregistrés sur le stockage interne.
  • Tous les fichiers que vous avez enregistrés sur un stockage externe en utilisant .

Cependant, vous devez supprimer manuellement tous les fichiers mis en cache créés avec régulièrement et également supprimer régulièrement les autres fichiers dont vous n'avez plus besoin.

Avec OneDrive, vous pouvez partager des photos, des documents Microsoft Office, d'autres fichiers et des dossiers entiers. Les fichiers et dossiers stockés dans OneDrive sont privés jusqu'à ce que vous les partagiez. Vous pouvez mettre fin à votre accès à tout moment.

Note: Le partage est limité dans la version de base ou de stockage uniquement de OneDrive. Les limites sont réinitialisées après 24 heures, mais vous pouvez augmenter la limite de partage de fichiers et bénéficier de fonctionnalités de partage supplémentaires.

Créer un lien

Cependant, ces liens disposent d'une autorisation de modification par défaut. Si vous souhaitez uniquement accorder à l'utilisateur l'autorisation Afficher, vous devrez utiliser le site Web OneDrive pour créer le lien (ou modifier celui que vous avez créé).

E-mail

Sélectionnez cette option si vous souhaitez envoyer une invitation par e-mail à des utilisateurs ou à des groupes, puis suivre les personnes que vous avez invitées. Cela vous permet également de supprimer l'autorisation ultérieurement si nécessaire.


Remarques:

Donnez aux destinataires plus de contrôle et de collaboration sur les dossiers partagés

Si vous partagez des dossiers et accordez des autorisations de modification, les utilisateurs ayant accès peuvent ajouter les dossiers partagés à leur propre OneDrive. Cela leur permettra de stocker un tel dossier avec leurs propres dossiers et éléments, de déplacer facilement des éléments entre les dossiers et de travailler confortablement avec eux hors ligne. Toutes les modifications apportées sont synchronisées avec le dossier partagé, de sorte que toutes les personnes ayant accès au dossier obtiennent la dernière version des éléments.

    Pour partager un dossier à l'aide d'un lien: Cliquez sur Obtenez le lien et dans la fenêtre Accès général sélectionner Tout utilisateur disposant du lien peut modifier cet élément.

    Pour partager un dossier par e-mail: sélectionner Envoyé par email et dans la fenêtre Accès général sélectionner Peut être changé.

Conseil: Le destinataire pourra ajouter des dossiers partagés à son OneDrive, plutôt que des fichiers individuels. Si vous souhaitez que le destinataire ajoute des fichiers à OneDrive, placez-les d'abord dans un dossier, puis partagez-le.

Afficher une liste des éléments que vous avez partagés

Dans OneDrive.com, sélectionnez Sont communs puis cliquez sur je partage.

Voici comment partager des fichiers ou des dossiers.

Créer un lien copiable vers un fichier ou un dossier

Une autre façon de partager consiste à créer un lien vers le fichier ou le dossier que vous pouvez copier et coller dans un message texte ou sur un site Web. Les utilisateurs avec lesquels vous partagez ces liens peuvent les transmettre à d'autres.

Remarques:

Partager dans l'application mobile OneDrive

Pour plus d’informations, consultez les articles suivants :

Informations Complémentaires

Aide en ligne
Consultez d’autres pages d’aide pour OneDrive et OneDrive Entreprise.
Pour plus d’informations sur l’application mobile OneDrive, consultez Dépanner l’application mobile OneDrive.

Assistance par e-mail
Si vous avez besoin d'aide, secouez votre appareil mobile pendant que l'application OneDrive est ouverte ou envoyez un e-mail à l'équipe d'assistance OneDrive. Pour contacter le support OneDrive Entreprise, sur un PC Windows ou un Mac, cliquez sur l'icône OneDrive dans la zone de notification ou dans la barre de menus, puis sélectionnez Autre > Poster un avis > Il y a quelque chose que je n'aime pas.

Les administrateurs OneDrive Entreprise peuvent également trouver utiles la communauté technique OneDrive Entreprise, l’aide aux administrateurs OneDrive Entreprise et le support Office 365 Entreprise.

Nafa 647 14.01.10 02:27 Actuellement sur le sujet

L'article est utile.
Il y a en effet beaucoup de choses non évidentes dans le fonctionnement d'un stockage, donc mes ajouts :
1. Si plusieurs programmeurs fonctionnent, alors en option,
La journée de travail commence généralement par ce qui suit :
Nous lançons notre base de données dans le configurateur, faisons un clic droit sur la racine de configuration - récupérons depuis le stockage, cochons la case "récursive", cliquez sur OK. Après cela, nous entrons dans la configuration tout ce que d'autres ont développé à partir du référentiel. NOUS NE METTONS PAS À JOUR LA DB LUI-MÊME !!!
Ensuite, nous voulons « comparer la configuration avec la configuration de la base de données » - et nous voyons une liste de toutes les modifications apportées par les autres programmeurs du groupe au cours de la journée précédente. Si vous avez des questions sur les modifications, veuillez contacter la personne qui les a apportées.
Une fois que tout est réglé, nous l'enregistrons dans la base de données.
Pourquoi ne pas le comparer avec la configuration du stockage - d'une part, pour que les objets sur lesquels vous travaillez ne soient pas affichés, et d'autre part, cela fonctionne plus rapidement.
2. En milieu de journée : les modifications urgentes (pour les mises à jour dynamiques) sont immédiatement envoyées au référentiel. Pas urgent - après avoir modifié tous les objets associés. (voir explication ci-dessous)
3. En fin de compte (et si vous devez effectuer une mise à jour complète de la base de données, alors avant), nous stockons tout ce que nous pouvons.
Ce n'est pas une commande obligatoire, mais très pratique.

4. Pourquoi ne pas le publier tout de suite :
car l'intégrité des modifications n'est contrôlée par 1C que là où il existe un lien. Autrement dit, si, par exemple, vous avez créé un répertoire « Voitures clients » et ajouté un lien vers celui-ci dans la « facture », vous pouvez alors placer la « Facture » ​​dans le stockage seulement après (ou simultanément) avec le répertoire « Client Voitures". Mais si, par exemple, vous avez utilisé ce répertoire dans une procédure de module général, qui est appelée lors de la validation d'une facture, alors ce module général peut facilement s'insérer dans le stockage sans placer le répertoire. Si après cela un autre programmeur reçoit ce module du référentiel, alors les factures ne seront plus enregistrées dans sa base de données. (Et si vous mettez à jour la base de données principale, ils s'arrêteront là aussi).
Et c’est un autre bon cas, car ce n’est qu’une erreur. Mais si, par exemple, vous avez changé le type d'attribut dans un document de chaîne en texte et que dans la procédure du module général il y avait une vérification Si Attribut = "1" et il est devenu Si Attribut = 1 et le module a été placé dans stockage mais le document ne l'était pas, alors il n'y aura pas d'erreur (bonjour le contrôle du type d'absence), ce qui signifie que ceux qui recevront un tel module auront des documents mal exécutés (et c'est bien si ce n'est pas la base de données principale). Par conséquent, il est préférable de soumettre les modifications au référentiel sous la forme d'un « package complet » (tous les objets modifiés sur un sujet), si vous avez besoin de quelque chose pour une autre tâche, vous pouvez immédiatement le récupérer pour une nouvelle ou simplement « le laisser capturé ». en le plaçant dans le référentiel.

A ce propos, je n'ai pas bien compris :

S'il y a beaucoup de programmeurs, alors les modifications de chacun doivent être envoyées au référentiel une par une, après avoir téléchargé AU PRÉLIMINAIRE le travail de chacun sur des fichiers externes avec la configuration de la base de données locale et (si la fusion est effectuée à partir de différents postes de travail), sans oublier de METTRE À JOUR le bases de données locales du référentiel avant chaque fusion - vers la dernière version, avec les modifications des camarades précédemment connectés qui y sont présentes.

Étrangement, il n'y avait aucun problème lorsque plusieurs personnes effectuaient des modifications en même temps, sauf que cela ralentissait un peu. C'est pourquoi la capture d'objets est conçue pour que 2 personnes ne réparent pas la même chose en même temps. De plus, il a été remarqué que : si 1 développeur modifiait un document, disons « Rapport avancé », et qu'ensuite le second ne le « recevait » pas, mais le capturait immédiatement (par exemple, un objet vient d'être stocké), alors 1C suivra cela et lui donnera déjà une nouvelle version modifiée. (Cela arrive si drôle - vous regardez le document - 5 détails, saisissez-le - déjà 15).

Et je ne comprends pas non plus pourquoi je devrais télécharger le travail sur des fichiers externes.

4. Il est plus facile pour les programmeurs de créer des copies de la base de données non pas en chargeant et en déchargeant 1Sovskaya (car cela nécessite un mode exclusif et n'est pas très rapide), mais en restaurant une sauvegarde ou simplement en copiant la base de données sur la joue.

5. Si vous avez besoin d'ajouter un nouvel objet (document, ouvrage de référence, etc.), alors récupérez la racine de configuration, ajoutez-la, ajoutez un minimum de détails (les objets complètement « vides » ne sont pas toujours enregistrés), déposez la racine dans le dépôt (cet objet sera également restitué en même temps) et récupérer l'objet. (Afin de ne pas garder la racine capturée pendant longtemps - d'autres en ont aussi besoin).

6. Si vous souhaitez corriger les droits d'accès à un objet, vous l'avez capturé - mais les droits d'accès ne sont toujours pas disponibles - saisissez le rôle correspondant.

7. Étant donné qu'il est préférable d'effectuer le débogage en utilisant les données les plus récentes, les bases de données de travail doivent être mises à jour. Pour ce faire : placez toutes les modifications dans le stockage, déconnectez la base de données du stockage, copiez-y la base de données principale sur le back-end (à partir d'une sauvegarde ou copiez-la simplement), reconnectez-la.

8. Lorsque nous « récupérons tout du stockage » (étape 1), il arrive que 1C produise un tas de messages puis écrit que « a échoué » (la liste des objets change). Cela signifie que nous n’avons pas reçu de modifications depuis longtemps. C'est bon, cliquez à nouveau sur OK et ainsi de suite jusqu'à ce que cela fonctionne comme il se doit.

9. Parfois, 1C refuse d'enregistrer les modifications reçues du référentiel et le message n'est absolument pas clair. Les coupables sont généralement des « registres d'information ». Nous découvrons quel registre d'informations a modifié sa structure, supprimons tous les enregistrements de notre base de données, après quoi tout sera mis à jour comme il se doit.

10. Étant donné que les bases de données de travail sont constituées de la base de données principale, les noms des configurations sont les mêmes et il est facile de les confondre, puis les malentendus commencent lorsque l'utilisateur dit qu'il a 100 roubles dans son rapport et que vous avez 100 000 roubles . En option, nous ajoutons une ligne au module applicatif qui vérifie au démarrage du programme de quel type de base de données il s'agit et, si ce n'est la base de données principale, l'affichons dans le titre du programme 1C (par exemple, « BASE DE TRAVAIL DU PROGRAMMEUR "IVANOV")

11. Lorsque la base de données est connectée au stockage, mais qu'au démarrage, il n'a pas été possible de s'y connecter pour quelque raison que ce soit, le message « Échec de la connexion, déconnexion du stockage » peut apparaître (et vous avez capturé des objets) - ici RÉPONSE "NON". Mais si vous répondez « oui » par accident, n’essayez pas de vous reconnecter !!! Enregistrez d’abord la configuration dans un fichier !!! Depuis lorsque nous nous connectons au stockage, toute la configuration de la base de données est remplacée par la configuration du stockage. Après cela, nous chargeons les modifications du fichier enregistré et continuons à travailler.

Bien que les ressources soient excellentes pour stocker les images et les sons de notre application, nous devons parfois sauvegarder des informations et les charger à nouveau plus tard. Un exemple simple consiste à travailler avec un tableau des meilleurs résultats.

Android propose différentes manières de mettre en œuvre cela ; vous pouvez utiliser les paramètres généraux de l'application, une petite base de données SQLite, etc. Toutes ces fonctionnalités ont une chose en commun : elles ne gèrent pas les gros fichiers binaires. Pourquoi pourrions-nous avoir besoin de cela ? Bien que nous puissions dire au système d'installer l'application sur un stockage externe (et ainsi de ne pas gaspiller la mémoire de stockage interne), cela ne fonctionnera que dans les versions Android à partir de 2.2. Dans les anciennes versions du système d'exploitation, toutes les données d'application seront stockées dans la mémoire interne de l'appareil. En théorie, nous pourrions inclure le code de notre application dans un fichier APK et télécharger toutes les ressources du serveur sur la carte SD au premier lancement du programme. De nombreux jeux Android célèbres le font.

Il existe d'autres scénarios dans lesquels nous avons besoin d'accéder à une carte mémoire (ce qui est essentiellement synonyme du terme stockage externe pour les appareils modernes). Nous pourrions permettre à nos utilisateurs de créer leurs propres niveaux dans l'éditeur interne. Une fois créés, nous devrons les stocker quelque part, et une carte SD est parfaite pour cela. Nous n'utiliserons donc pas les mécanismes inhabituels proposés par Android pour stocker les paramètres de l'application, mais examinerons plutôt le mécanisme de mise en œuvre de la lecture et de l'écriture de fichiers sur la carte SD.

La première chose que nous devons faire est de demander l’autorisation d’accéder au stockage externe. Cela se fait dans le fichier manifeste en utilisant l'élément dont nous avons déjà parlé .

Ensuite, nous devons vérifier si le stockage externe est actuellement disponible. Par exemple, lorsque vous travaillez avec AVD, vous avez la possibilité de vous passer de l'émulation de la présence d'une carte mémoire - l'application ne pourra alors rien y écrire. Une autre raison pour ne pas accéder à la carte SD est qu'elle est occupée par un autre processus (par exemple, l'utilisateur la visualisant via USB). C'est ainsi que nous vérifions l'état de la carte mémoire ;

En conséquence, nous obtenons une chaîne. La classe Environment définit un ensemble de constantes, dont l'une est appelée Environment. MEDI AMOUNTED (sa valeur est également une chaîne). Si la méthode ci-dessus renvoie exactement cette constante, cela signifie que nous avons un accès complet (lecture et écriture) au stockage externe. Notez que vous devez en fait utiliser la méthode égale pour comparer deux chaînes ; L'opérateur d'égalité dans de tels cas ne donne pas toujours des résultats corrects.

Nous avons donc découvert que nous avions un accès complet au stockage externe et que nous devons maintenant obtenir le nom de son répertoire racine. Si nous avons besoin d'accéder à un fichier spécifique, le chemin d'accès à celui-ci doit être déterminé par rapport au répertoire racine. Pour ce faire, nous utiliserons une autre méthode statique de la classe Environment :

Désormais, nous pouvons utiliser des classes Java standards pour lire et écrire des fichiers. Créons un petit exemple qui implémente l'écriture d'un fichier sur une carte mémoire, sa lecture, la démonstration de son contenu dans TextView et sa suppression de la carte. Le listing 4.8 montre le code source pour cela.

Inscription 4.8. Activité Package ExternalStorageTest com.bad.ogi c.androi dgames ;

Nous vérifions d'abord la disponibilité physique de la carte SD (si la vérification échoue, c'est là qu'elle se termine). Ensuite, nous obtenons le répertoire racine du référentiel et créons une nouvelle instance de l'objet File pointant vers le fichier que nous allons créer dans l'instruction suivante. La méthode writeTextFi 1e utilise des classes d'E/S Java standard pour mettre en œuvre nos objectifs. Si le fichier n'existe pas déjà, la méthode le créera ; sinon, il écrasera celui existant. Après avoir écrit avec succès le texte dans un fichier sur la carte, nous le lisons à nouveau et le définissons comme contenu de TextView. La dernière étape consiste à supprimer le fichier du stockage externe. Toutes les actions sont effectuées avec les précautions nécessaires, grâce auxquelles les problèmes sont également signalés dans TextView. La figure 4.11 montre le résultat de l'activité.

Les points suivants doivent être retenus de cette leçon.

Ne travaillez pas avec des fichiers qui ne vous appartiennent pas. Les utilisateurs seront très en colère si vous supprimez des photos de leur dernière soirée.

Vérifiez toujours la disponibilité du stockage externe.

Ne jouez pas avec les fichiers de service sur le stockage externe. Je suis sérieux.

Riz. 4.11. Message de Jolly Roger

Étant donné qu'il est facile de supprimer tous les fichiers du stockage externe, vous devriez réfléchir à deux fois avant de créer et de publier une application sur l'Android Market qui demande l'accès à la carte SD - après tout, après l'installation, elle aura un accès complet à tous les fichiers.

Traitement audio

Android propose des API faciles à utiliser pour lire des effets sonores et des fichiers musicaux, ce qui est exactement ce dont nous avions besoin pour écrire un jeu. Regardons-les.

Stockage de configuration dans 1C 8.2 et 8.3 est un outil de développement groupé de solutions, intégré à la plateforme 1C : Enterprise 8. Le référentiel permet le développement multi-utilisateurs de solutions par un nombre illimité d'utilisateurs. Avec son aide, vous pouvez voir en détail l'historique complet du développement de la configuration et chaque étape des développeurs.

Examinons de plus près les paramètres et l'utilisation du stockage de configuration.

Un référentiel est essentiellement une base de données dans laquelle les modifications de configuration sont stockées. Chaque développeur travaille avec sa propre base d'informations connectée au stockage. La base de travail peut également être connectée au stockage. Le schéma général est mieux représenté dans cette image :

Cette base de données stocke également des informations sur qui a capturé tel ou tel objet. Capturer un objet est une étiquette définie par le développeur. La capture installée vous permet d'éviter les collisions lors du développement du groupe. Lorsqu'un objet est capturé, personne ne peut le modifier.

Vous pouvez capturer soit un objet entier (de manière récursive), soit un objet ou une forme distinct.

Une fois que le développeur a effectué certaines actions sur l'objet, il est obligé de placer les modifications dans le référentiel. Et supprimez ainsi la marque indiquant que l'objet est capturé.

Comment créer un stockage 1C

Créer un référentiel est assez simple, pour cela, vous devez sélectionner l'élément « Créer un référentiel » dans le menu « Configuration - Configuration du référentiel ». Dans le menu qui apparaît, précisez simplement le chemin d'accès au futur emplacement de stockage et le login/mot de passe de l'utilisateur administrateur :

Lors de la création, assurez-vous de créer un compte de sauvegarde avec des droits d'administrateur - cela est très souvent utile.

Comment se connecter au stockage 1C

Pour vous connecter au stockage de configuration, vous devez sélectionner l'élément « Se connecter au stockage » dans le menu « Configuration - Stockage de configuration ». Dans la fenêtre qui apparaît, vous devez préciser le chemin d'accès au stockage et le login/mot de passe utilisateur, cliquer sur « Connecter » :

Obtenez 267 leçons vidéo sur 1C gratuitement :

Au moment de la connexion, votre configuration sera remplacée par la configuration du référentiel, soyez prudent.

Administration du stockage de configuration 1C

Pour administrer le stockage 1C, vous devez sélectionner l'élément suivant dans le menu de configuration - « Configuration - Stockage de configuration - Administration » :

  • Dans l'onglet « Utilisateurs », vous pouvez ajouter ou supprimer de nouveaux utilisateurs, ainsi que définir les droits pour chacun d'entre eux.
  • Sur l'onglet « Connexions », vous pouvez visualiser tous les utilisateurs connectés au stockage et, si nécessaire, les déconnecter.
  • Dans l'onglet « Annuler la capture », vous pouvez supprimer la capture de n'importe quel utilisateur sur un objet spécifique, si, bien entendu, vous disposez des droits pour le faire.

Comment afficher l'historique du stockage 1C

Pour visualiser l'historique, allez dans le menu « Configuration - Configuration Storage », sélectionnez « Storage History » :

Dans l'historique du stockage 1C, vous pouvez voir quand, par qui et quoi a été modifié.

Développement avec stockage 1C 8.3

Travailler avec le stockage peut être grossièrement divisé en actions principales :

  • configurations du référentiel de configuration 1C ;
  • mettre à jour les statuts de stockage 1C ;
  • capture en stockage;
  • espace de stockage.

Examinons de plus près chaque action :

Mettre à jour les statuts de stockage 1C

Récupère les derniers statuts des objets (capturés ou non).

Appelé : « Configuration - Stockage de la configuration - Statuts de mise à jour ».

Mise à jour de la configuration depuis le référentiel de configuration 1C

L'action récupérera tous les objets de configuration modifiés qui ont été placés dans le référentiel. L'exécution de cette commande met également à jour les statuts des objets.

Appelé : « Configuration - Stockage de la configuration - Mettre à jour la configuration à partir du stockage. »

Capturer le stockage de configuration 1C

À l'aide de cette commande, vous pouvez bloquer les modifications de cet objet pour les autres développeurs : pendant que vous capturez l'objet, aucun utilisateur ne peut le modifier tant que vous n'avez pas remis l'objet.

Vous pouvez capturer en cliquant avec le bouton droit sur le menu contextuel de l'objet de métadonnées :

Dans la fenêtre qui s'ouvre, vous pouvez définir certains paramètres :

  • Exécuter de manière récursive- vous permet de capturer tous les objets subordonnés - formulaires, etc.
  • Autoriser à recevoir capturé— permet à d'autres utilisateurs de recevoir des versions intermédiaires d'un objet

Chambre dans le stockage 1C

Après avoir modifié un objet, il faut le remettre en stockage ; cela se fait de la même manière que la capture, seule l'option « Placer en stockage » est sélectionnée :

Lors de la publication, assurez-vous de remplir le champ « commentaire » ; c'est très important lors du développement du groupe. Six mois plus tard, vous ne vous souviendrez même plus pourquoi vous avez effectué certaines actions. Tout comme la capture, la pièce possède ses propres paramètres spécifiques :

  • Exécuter de manière récursive— vous permet de placer tous les objets subordonnés - formulaires, etc.
  • Laisser capturé— permet de placer une version « intermédiaire » d'un objet, tout en laissant la capture utilisateur

Comment ajouter un nouvel objet au stockage 1C