30 votes

stockage des données d'application Android sur la carte SD

Existe-t-il un moyen de stocker les données d'application Android sur la carte SD plutôt que dans la mémoire interne? Je sais comment transférer la base de données sqlite de l'application de la mémoire interne vers la carte SD, mais qu'en est-il si la mémoire interne est saturée en premier lieu? Comment tout le monde gère-t-il cela?

76voto

yincrash Points 2344

Il est préférable d'utiliser Environment.getExternalStorageDirectory () que de coder en dur "/ sdcard". Il n'est pas toujours certain que le nom du dossier sera appelé ainsi. De plus, la classe Environment propose une méthode getExternalStorageState () pour vérifier si le stockage externe est même disponible.

33voto

Rabih harb Points 996

Pour commencer:

Selon le modèle/os, vous pouvez accéder à la racine de la carte sd répertoire avec:

File externalStorage = Environment.getExternalStorageDirectory();

Cette référence à la sd interne de stockage interne ou la carte mémoire sd.

externalStorage.getAbsolutePath() 

sera de retour l'une des valeurs suivantes

"/sdcard/" ou "/mnt/sdcard/"

Pour accéder à l'externe mémoire sd ou micro SD, que vous avez généralement la fiche de l'extérieur du téléphone ou de la tablette, vous devez utiliser l'un des dossiers suivants qui android crée pour pointer vers la mémoire externe:

"/mnt/sdcard/sd" 
"/mnt/sdcard/external_sd"

"/sdcard/external_sd"
"/sdcard/sd" 

"/mnt/sdcard/"

ps: vous pouvez remarquer un dossier vide external_sd ou sd sur la sdcard interne

de mémoire, ce dossier est vide et il est utilisé pour point de carte externe micro sd.

à la fin, assurez-vous que vous avez accès en lecture/écriture sur la carte sd android.permission.WRITE_EXTERNAL_STORAGE dans le manifeste android xml.

enfin, vous devez spécifier le nom de fichier et de votre prêt

private SQLiteDatabase DB = null;

private static final String DATABASE_NAME = "MyDb.db"; 
////////////
File sdcard = Environment.getExternalStorageDirectory();

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME;

DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
///////////

et vous êtes prêt à aller ...

13voto

phreed Points 724

Voici un autre petit truc utile. L' Application a un certain nombre de méthodes qui sont appelés à acquérir des chemins. En particulier, l'application a la méthode getDatabasePath est utilisé par SQLiteOpenHelper pour construire le chemin. Une application personnalisée classe peut redéfinir ces méthodes pour fournir des chemins différents, y compris les chemins d'accès dans la getExternalStorageDirectory.

Le stockage externe est soit spécifique à l'application ou public. Il existe des méthodes, en remplacement de la getExternalStorageDirectorymécanisme, getExternalFilesDir() et getExternalStoragePublicDirectory() respectivement.

9voto

haseman Points 6071

Avertissement: Cette réponse est obsolète. Vous devez utiliser de l'Environnement.getExternalStorageDirectory() pour obtenir le chemin d'accès racine de la carte SD comme indiqué dans les réponses ci-dessous.

Vieux de Réponse, les commentaires sur ce sens:

L'ajout d' /sdcard/ à la racine de votre chemin direct de votre application Android pour utiliser la carte SD (au moins, il travaille avec le G1). Android objets du système de fichiers vous donner la possibilité de vérifier les tailles de fichier... il devrait donc être possible (si délicat) pour écrire le fail-over code. Ce code permettra d'adapter votre chemin de la racine si la mémoire interne rempli.

3voto

Loris Albanese Points 31

certains appareils utilisent / mnt / sdcard comme point racine de la carte SD.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X