En plus de toutes les autres belles réponses, je pourrais ajouter un peu plus à cette question, de sorte qu'il peut donner une plus large couverture pour les lecteurs. Dans ma réponse ici, je voudrais utiliser 2 dénombrable des ressources à présenter de Stockage Externe.
La première ressource est de Android de Programmation, Le Big Nerd Ranch Guide 2e édition, chapitre 16, page 294.
Le livre décrit la base et externe de fichier et de répertoire des méthodes. Je vais essayer de faire un résumé de ce qui pourrait être pertinente à votre question.
La partie suivante du livre:
De Stockage Externe
Votre photo a besoin de plus de place sur l'écran. Images pleine grandeur sont trop grandes pour les coller à l'intérieur d'un
La base de données SQLite, encore moins un Intent
. Ils auront besoin d'un endroit pour vivre dans votre système de fichiers.
Normalement, vous devez mettre dans votre stockage privé. Rappelez-vous que vous utilisé votre stockage privé
pour sauvegarder votre base de données SQLite. Avec des méthodes comme Context.getFileStreamPath(String)
et
Context.getFilesDir()
, vous pouvez faire la même chose avec les fichiers ordinaires, trop (qui vivent dans une
sous-dossier adjacentes aux bases de données sous-dossier de votre base de données SQLite vit en)
Base de fichier et de répertoire des méthodes dans le Contexte
| Method |
|---------------------------------------------------------------------------------------|
|File etFilesDir() |
| - Returns a handle to the directory for private application files. |
| |
|FileInputStream openFileInput(String name) |
| - Opens an existing file for input (relative to the files directory). |
| |
|FileOutputStream openFileOutput(String name, int mode) |
| - Opens a file for output, possibly creating it (relative to the files directory). |
| |
|File getDir(String name, int mode) |
| - Gets (and possibly creates) a subdirectory within the files directory. |
| |
|String[] fileList() |
| - Gets a list of file names in the main files directory, such as for use with |
| openFileInput(String). |
| |
|File getCacheDir() |
| - Returns a handle to a directory you can use specifically for storing cache files. |
| You should take care to keep this directory tidy and use as little space as possible|
Si vous stockez les fichiers que seul votre application doit utiliser, ces méthodes sont exactement ce que
vous avez besoin d'.
D'autre part, si vous avez besoin d'une autre application pour écrire dans ces fichiers, vous êtes hors de la chance: alors que
il y a un Context.MODE_WORLD_READABLE
drapeau vous pouvez passer à l' openFileOutput(String, int)
, il est
obsolète, et pas totalement fiable dans ses effets sur les appareils récents. Si vous stockez des fichiers à partager
avec d'autres applications ou de recevoir des fichiers à partir d'autres applications (comme les fichiers des images enregistrées), vous devez les stocker sur
de stockage externe à la place.
Il existe deux types de stockage externe: primaire, et tout le reste. Tous les appareils Android ont à
moins un emplacement pour le stockage externe: l'emplacement principal, qui est situé dans le dossier renvoyé par
Environment.getExternalStorageDirectory()
. Cela peut être une carte SD, mais aujourd'hui il n'est plus
souvent intégré dans l'appareil lui-même. Certains appareils peuvent avoir de stockage externe supplémentaire. Que
relèveraient de la "tout le reste".
Contexte fournit quelques méthodes pour arriver au stockage externe, trop. Ces méthodes fournissent facile
façons d'obtenir à votre primaire de stockage externe, et un peu-sorta-des moyens faciles à obtenir à tout le reste. Tous
ces méthodes de stocker des fichiers dans des places disponibles, aussi, donc être prudent avec eux.
Externe de fichier et de répertoire des méthodes dans le Contexte
| Method |
| --------------------------------------------------------------------------------------|
|File getExternalCacheDir() |
| - Returns a handle to a cache folder in primary external storage. Treat it like you do|
| getCacheDir(), except a little more carefully. Android is even less likely to clean |
| up this folder than the private storage one. |
| |
|File[] getExternalCacheDirs() |
| - Returns cache folders for multiple external storage locations. |
| |
|File getExternalFilesDir(String) |
| - Returns a handle to a folder on primary external storage in which to store regular |
| files. If you pass in a type String, you can access a specific subfolder dedicated |
| to a particular type of content. Type constants are defined in Environment, where |
| they are prefixed with DIRECTORY_. |
| For example, pictures go in Environment.DIRECTORY_PICTURES. |
| |
|File[] getExternalFilesDirs(String) |
| - Same as getExternalFilesDir(String), but returns all possible file folders for the |
| given type. |
| |
|File[] getExternalMediaDirs() |
| - Returns handles to all the external folders Android makes available for storing |
| media – pictures, movies, and music. What makes this different from calling |
| getExternalFilesDir(Environment.DIRECTORY_PICTURES) is that the media scanner |
| automatically scans this folder. The media scanner makes files available to |
| applications that play music, or browse movies and photos, so anything that you |
| put in a folder returned by getExternalMediaDirs() will automatically appear in |
| those apps. |
Techniquement, les dossiers fournis ci-dessus peuvent ne pas être disponibles, comme certains périphériques utilisation d'une carte SD amovible pour le stockage externe. Dans la pratique, c'est rarement un problème, parce que presque tous les appareils modernes ont inamovible de stockage interne pour leur "externe" de stockage. Il n'est donc pas la peine d'aller à des moyens extrêmes pour en rendre compte. Mais nous n'avons recommandé d'inclure un code simple pour se prémunir contre la possibilité, ce que vous allez faire dans un instant.
De stockage externe de l'autorisation
En général, vous avez besoin d'une permission pour écrire ou lire de stockage externe. Les autorisations sont bien connus de la chaîne de valeurs que vous mettez dans votre manifeste, à l'aide de l' <uses-permission>
balise. Ils racontent Android qui vous voulez faire quelque chose que Android veut vous demander la permission pour.
Ici, Android attend que vous pour demander la permission, car il veut appliquer une certaine responsabilité. Vous dites Android que vous avez besoin de l'accès de stockage externe, et Android va alors indiquer à l'utilisateur que c'est l'une des choses que votre demande n'est quand ils essaient de l'installer. De cette façon, personne n'est surpris quand vous commencez à épargner les choses à leur carte SD.
Dans Android 4.4, KitKat, ils desserrer cette restriction. Depuis Context.getExternalFilesDir(String)
renvoie un dossier qui est spécifique à votre application, il est logique que vous voulez être en mesure de lire et d'écrire des fichiers qui y vivent. Donc sur Android 4.4 (API 19) et le haut, vous n'avez pas besoin de cette autorisation pour ce dossier. (Mais vous avez encore besoin pour d'autres types de stockage externe.)
Ajouter une ligne à votre manifeste qui demande la permission de lire de stockage externe, mais seulement jusqu'à l'API Liste De 16,5 Demandant de stockage externe de l'autorisation (AndroidManifest.xml
)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bignerdranch.android.criminalintent" >
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
Le maxSdkVersion attribut qu'il fait en sorte que votre application ne demande de cette autorisation sur les versions d'Android qui sont plus âgés que les API 19, Android KitKat.
Notez que vous ne demandant qu'à lire de stockage externe. Il y a aussi un WRITE_EXTERNAL_STORAGE
autorisation, mais vous n'en avez pas besoin. Vous ne serez pas écrit quoi que ce soit pour du stockage externe: L'application appareil photo ne sera que pour vous
La deuxième ressource est ce lien lire tout cela, mais vous pouvez aussi sauter à l'Aide de l'appareil de Stockage Externe de la section.
Référence:
De plus la lecture de trucs:
Avertissement: Cette information a été prise à partir de l'Android de Programmation: Le Big Nerd Ranch Guide avec l'autorisation de l'auteur. Pour plus d'informations sur ce livre ou pour acheter un exemplaire, veuillez visiter bignerdranch.com.