Получить каталог приложений - PullRequest
72 голосов
/ 03 апреля 2011

Кто-нибудь знает, как мне получить путь к каталогу моего приложения?(например, /data/data/my.app.lication/)

В настоящее время я использую этот метод: myActivity.getFilesDir().getParent();, но мне кажется, что это обходной путь, когда есть более простое решение.Кроме того, побочным эффектом является создание каталога files, который не нужен.

Уточнение: Первое - спасибо за ответчики.Я пытаюсь понять, если уже существует метод, который делает это, а не для другого обходного пути.

Ответы [ 7 ]

91 голосов
/ 28 октября 2013

Существует более простой способ получить каталог данных приложения с помощью min API 4+.Из любого контекста (например, активность, приложение):

getApplicationInfo().dataDir

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

83 голосов
/ 03 апреля 2011
PackageManager m = getPackageManager();
String s = getPackageName();
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;

Если затмение беспокоит необнаруженное NameNotFoundException, вы можете использовать:

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);
}
21 голосов
/ 10 декабря 2011

Я получил это

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

отсюда :

17 голосов
/ 16 мая 2016

Просто используйте это в своем коде

 context.getApplicationInfo().dataDir
9 голосов
/ 29 августа 2012

Для текущего пакета приложений Android:

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

Для любого пакета:

public String getAnyDataDir(final Context context, final String packageName) throws Exception {
    return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir;
}
3 голосов
/ 19 декабря 2012

Основано на решении @ jared-burrows. Для любого пакета, но с передачей Context в качестве параметра ...

public static String getDataDir(Context context) throws Exception {
    return context.getPackageManager()
            .getPackageInfo(context.getPackageName(), 0)
            .applicationInfo.dataDir;
}
3 голосов
/ 03 апреля 2011

Если вы пытаетесь получить доступ к файлу, попробуйте методы openFileOutput() и openFileInput(), как описано здесь . Они автоматически открывают потоки ввода / вывода для указанного файла во внутренней памяти. Это позволяет вам обходить каталог и File объекты в целом, что является довольно чистым решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...