web-dev-qa-db-fra.com

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

Existe-t-il un moyen de stocker Android données d'application 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 que faire si le la mémoire interne est pleine en premier lieu? Comment tout le monde gère-t-il cela?

30
user121196

Avertissement: Cette réponse est obsolète. Vous devez utiliser Environment.getExternalStorageDirectory () pour obtenir le chemin racine de la carte SD comme mentionné dans les réponses ci-dessous.

Ancienne réponse, les commentaires à ce sujet ont du sens:

Ajouter /sdcard/ à la racine, votre chemin doit diriger votre Android pour utiliser la carte SD (au moins, cela fonctionne avec le G1). Les objets du système de fichiers d'Android vous permettent de vérifier la taille des fichiers ... il devrait donc être possible (si difficile) d'écrire du code de basculement. Ce code ajusterait votre chemin racine si la mémoire interne se remplissait.

9
haseman

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.

76
yincrash

Pour commencer:

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

File externalStorage = Environment.getExternalStorageDirectory();

Cela fera référence au stockage SD interne ou à la mémoire SD interne.

externalStorage.getAbsolutePath() 

renverra l'une des valeurs suivantes

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

Pour accéder à la mémoire SD externe ou à la micro SD, que vous branchez généralement depuis l'extérieur du téléphone/tablette, vous devez utiliser l'un des dossiers suivants que 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 carte SD interne

mémoire, ce dossier est vide et son utilisé pour pointer vers la carte micro sd externe.

à la fin, assurez-vous que vous avez un accès en lecture/écriture à la carte sd Android.permission.WRITE_EXTERNAL_STORAGE dans le fichier XML Android manifest.

enfin, vous devez spécifier le nom du fichier et 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 à partir ...

33
Rabih harb

Voici une autre astuce intéressante. Application a un certain nombre de méthodes qui sont appelées pour acquérir des chemins. En particulier, l'application a la méthode getDatabasePath avec est utilisée par SQLiteOpenHelper pour construire le chemin. Une classe d'application personnalisée peut remplacer ces méthodes pour fournir différents chemins, y compris des chemins dans getExternalStorageDirectory .

Le stockage externe est spécifique à l'application ou public. Il existe des méthodes qui remplacent le mécanisme getExternalStorageDirectory , getExternalFilesDir () et getExternalStoragePublicDirectory () respectivement.

13
phreed

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

3
Loris Albanese

Le problème avec l'utilisation de la carte SD est que vous ne pouvez pas supposer de manière fiable qu'elle sera toujours présente lorsque votre application en aura besoin. Ce n'est pas le cas avec la mémoire interne. Tant que votre application ne s'appuie pas sur ces données pour fonctionner, cela devrait aller.

2
Prashast