Получить каталог приложений
Кто-нибудь знает, как мне получить путь к каталогу приложений? (например, /data/data/my.app.lication/
)
В настоящее время я использую этот метод: myActivity.getFilesDir().getParent();
, но мне кажется, что это обходное решение, когда есть более простое решение. Кроме того, побочным эффектом является создание каталога files
, который не нужен.
Уточнение: во-первых - Спасибо за ответчиков. Я пытаюсь понять, существует ли уже метод, который делает это, а не для другого рабочего процесса.
Ответы
Ответ 1
PackageManager m = getPackageManager();
String s = getPackageName();
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;
Если eclipse беспокоится о неперемещенном 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);
}
Ответ 2
Существует более простой способ получить каталог данных приложения с min API 4+. Из любого контекста (например, Activity, Application):
getApplicationInfo().dataDir
http://developer.android.com/reference/android/content/Context.html#getApplicationInfo()
Ответ 3
Я получил это
String appPath = App.getApp().getApplicationContext().getFilesDir().getAbsolutePath();
отсюда:
Ответ 4
Просто используйте это в своем коде
context.getApplicationInfo().dataDir
Ответ 5
Для текущего пакета приложений 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;
}
Ответ 6
Если вы пытаетесь получить доступ к файлу, попробуйте методы openFileOutput()
и openFileInput()
, как описано здесь. Они автоматически открывают потоки ввода/вывода в указанный файл во внутренней памяти. Это позволяет обойти каталог и File
объекты в целом, что является довольно чистым решением.
Ответ 7
На основе решения @jared-burrows. Для любого пакета, но передавая контекст как параметр...
public static String getDataDir(Context context) throws Exception {
return context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0)
.applicationInfo.dataDir;
}