Czy ktoś wie, jak uzyskać ścieżkę do katalogu mojej aplikacji? (np. /data/data/my.app.lication/
)
Obecnie używam tej metody: myActivity.getFilesDir().getParent();
ale wydaje mi się, że jest to obejście, gdy istnieje prostsze rozwiązanie. Efektem ubocznym jest również utworzenie files
katalogu, który nie jest potrzebny.
Wyjaśnienie: Po pierwsze - dzięki za odpowiedzi. Próbuję zrozumieć, czy istnieje już metoda, która to robi, a nie inne obejście.
getDatabasePath()
. Lub, jeśli chcesz mieć własny katalog niezależny od wszystkiego innego, użyjgetDir()
.;)
Odpowiedzi:
PackageManager m = getPackageManager(); String s = getPackageName(); PackageInfo p = m.getPackageInfo(s, 0); s = p.applicationInfo.dataDir;
Jeśli zaćmienie martwi się o nie złapany
NameNotFoundException
, możesz użyć: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); }
źródło
sourceDir
jest niefortunnym błędnym nazwaniem.dataDir
powinno być tym, czego szukasz.Istnieje prostszy sposób na pobranie katalogu danych aplikacji z min API 4+. Z dowolnego kontekstu (np. Działania, aplikacji):
getApplicationInfo().dataDir
http://developer.android.com/reference/android/content/Context.html#getApplicationInfo ()
źródło
mam to
String appPath = App.getApp().getApplicationContext().getFilesDir().getAbsolutePath();
stąd :
źródło
Po prostu użyj tego w swoim kodzie
context.getApplicationInfo().dataDir
źródło
android.os.Environment.getDataDirectory().getAbsolutePath()
?W przypadku aktualnego pakietu aplikacji na Androida:
public String getDataDir(Context context) throws Exception { return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir; }
Dla każdego pakietu:
public String getAnyDataDir(Context context, String packageName) throws Exception { return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir; }
źródło
Jeśli próbujesz uzyskać dostęp do pliku, wypróbuj metody
openFileOutput()
iopenFileInput()
opisane tutaj . Automatycznie otwierają strumienie wejścia / wyjścia do określonego pliku w pamięci wewnętrznej. Pozwala toFile
całkowicie ominąć katalog i obiekty, co jest całkiem czystym rozwiązaniem.źródło
Oparty na rozwiązaniu @ jared-burrows. Dla dowolnego pakietu, ale przekazując Context jako parametr ...
public static String getDataDir(Context context) throws Exception { return context.getPackageManager() .getPackageInfo(context.getPackageName(), 0) .applicationInfo.dataDir; }
źródło