Кто-нибудь знает, как мне получить путь к каталогу моего приложения? (например /data/data/my.app.lication/
)
В настоящее время я использую этот метод: myActivity.getFilesDir().getParent();
но мне кажется, что это обходной путь, когда есть более простое решение. Также побочным эффектом является создание files
каталога, в котором нет необходимости.
Уточнение: Первое - спасибо за ответы. Я пытаюсь понять, существует ли уже метод, который это делает, а не для другого обходного пути.
getDatabasePath()
. Или, если вам нужен собственный каталог, независимый от чего-либо еще, используйтеgetDir()
.;)
Ответы:
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); }
источник
sourceDir
к сожалению, неправильное название.dataDir
должно быть то, что вы ищете.Есть более простой способ получить каталог данных приложения с 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.os.Environment.getDataDirectory().getAbsolutePath()
?Для текущего пакета приложений Android:
public String getDataDir(Context context) throws Exception { return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir; }
Для любого пакета:
public String getAnyDataDir(Context context, String packageName) throws Exception { return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir; }
источник
Если вы пытаетесь получить доступ к файлу, попробуйте
openFileOutput()
иopenFileInput()
методы , как описано здесь . Они автоматически открывают потоки ввода / вывода для указанного файла во внутренней памяти. Это позволяет вам полностью обойти каталог иFile
объекты, что является довольно чистым решением.источник
На основе решения @ jared-burrows. Для любого пакета, но с передачей Context в качестве параметра ...
public static String getDataDir(Context context) throws Exception { return context.getPackageManager() .getPackageInfo(context.getPackageName(), 0) .applicationInfo.dataDir; }
источник