web-dev-qa-db-fra.com

Obtenir le répertoire des applications

Est-ce que quelqu'un sait comment obtenir le chemin de mon répertoire d'application? (par exemple /data/data/my.app.lication/)

Actuellement, j'utilise cette méthode: myActivity.getFilesDir().getParent();, mais cela me semble une solution de contournement lorsqu'il existe une solution plus simple. En outre, l’effet secondaire est la création du répertoire files, qui n’est pas nécessaire.

Clarification: Premier - Merci pour les réplicateurs. J'essaie de comprendre s'il existe déjà une méthode qui le fait, pas pour une autre solution de rechange.

72
MByD
PackageManager m = getPackageManager();
String s = getPackageName();
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;

Si Eclipse s'inquiète d'un NameNotFoundException non capturé _, vous pouvez utiliser:

PackageManager m = getPackageManager();
String s = getPackageName();
try {
    PackageInfo p = m.getPackageInfo(s, 0);
    s = p.applicationInfo.dataDir;
} catch (PackageManager.NameNotFoundException e) {
    Log.w("yourtag", "Error Package name not found ", e);
}
83
Philip Sheard

Il existe un moyen plus simple d’obtenir le répertoire de données de l’application avec min API 4+. À partir de n'importe quel contexte (par exemple, activité, application):

getApplicationInfo().dataDir

http://developer.Android.com/reference/Android/content/Context.html#getApplicationInfo ()

92
James Wald

J'ai ce

String appPath = App.getApp().getApplicationContext().getFilesDir().getAbsolutePath();

à partir d'ici :

21
davibq

Il suffit d'utiliser ceci dans votre code

 context.getApplicationInfo().dataDir
17
RATHI

Pour le package d’application actuel Android:

public String getDataDir(final Context context) throws Exception {
    return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir;
}

Pour tout forfait:

public String getAnyDataDir(final Context context, final String packageName) throws Exception {
    return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir;
}
9
Jared Burrows

Basé sur la solution de @ jared-burrows. Pour n'importe quel paquet, mais en passant le contexte comme paramètre ...

public static String getDataDir(Context context) throws Exception {
    return context.getPackageManager()
            .getPackageInfo(context.getPackageName(), 0)
            .applicationInfo.dataDir;
}
3
Leonardo Cardoso

Si vous essayez d'accéder à un fichier, essayez les méthodes openFileOutput() et openFileInput() comme décrit ici . Ils ouvrent automatiquement les flux d’entrée/sortie vers le fichier spécifié dans la mémoire interne. Cela vous permet de contourner le répertoire et les objets File, ce qui est une solution plutôt propre.

3
Chris Thompson