获取应用程序目录

MBy*_*ByD 74 directory android

有人知道如何获取我的应用程序目录的路径?(例如/data/data/my.app.lication/)

目前我正在使用这种方法:myActivity.getFilesDir().getParent();但在我看来,当有一个更简单的解决方案时,我就像一个解决方法.此外,副作用是创建files目录,这是不需要的.

澄清:首先 - 感谢回复者.我试着理解是否存在已经存在的方法,而不是另一种解决方法.

Jam*_*ald 95

有一种更简单的方法来获取具有最小API 4+的应用程序数据目录.从任何上下文(例如,活动,应用程序):

getApplicationInfo().dataDir
Run Code Online (Sandbox Code Playgroud)

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


Phi*_*ard 85

PackageManager m = getPackageManager();
String s = getPackageName();
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;
Run Code Online (Sandbox Code Playgroud)

如果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);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然我使用不同的解决方案,但我发现你的确非常"干净" (2认同)
  • 这会让你获得APK路径,`sourceDir`是一个不幸的错误.`dataDir`应该是您正在寻找的. (2认同)
  • 它返回应用程序的目录,这是问题所要求的.在投票之前,请尝试正确阅读问题. (2认同)

dav*_*ibq 21

我懂了

String appPath = App.getApp().getApplicationContext().getFilesDir().getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)

从这里:

  • 请花些时间阅读您正在回答的问题.getFilesDir()机制已经被提出并在问题本身的文本中被拒绝.另外,正如njzk2所指出的那样,除非你采用其父目录,否则它不会返回所需的结果,如问题中所做的那样. (8认同)
  • getFilesDir 返回 dataDir 的子目录 (2认同)

RAT*_*THI 18

只需在代码中使用它即可

 context.getApplicationInfo().dataDir
Run Code Online (Sandbox Code Playgroud)


Jar*_*ows 9

对于当前的Android应用程序包:

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

对于任何包装:

public String getAnyDataDir(final Context context, final String packageName) throws Exception {
    return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir;
}
Run Code Online (Sandbox Code Playgroud)