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?
Réponses
Trop de publicités?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.
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 ...
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.
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.