Получить Каталог Приложений


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

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

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

7 65

7 ответов:

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);
}

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

getApplicationInfo().dataDir

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

Я получил

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

отсюда:

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

context.getApplicationInfo().dataDir

для текущего пакета приложений 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;
}

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

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

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