2011-04-03 24 views
60

¿Alguien sabe cómo obtengo la ruta de mi directorio de aplicaciones? (Por ejemplo, /data/data/my.app.lication/)Obtener el Directorio de aplicaciones

Actualmente estoy usando este método: myActivity.getFilesDir().getParent();, pero me parece una solución cuando hay una solución más simple. Además, el efecto secundario es la creación del directorio files, que no es necesario.

aclaración: Primero - Gracias por las respuestas. Intento entender si ya existe un método que lo hace, no para otro trabajo alternativo.

+0

@MByD: Por curiosidad, lo que específicamente está tratando de hacer? No deberías necesitar ese directorio. Por ejemplo, si desea trabajar con el directorio de la base de datos, use 'getDatabasePath()'. O bien, si desea que su propio directorio sea independiente de cualquier otra cosa, use 'getDir()'. – CommonsWare

+0

@CommonsWare - Tengo un objeto compartido que no está bajo mi control que crea varias carpetas en mi carpeta de paquetes, y necesito acceder a ellas. Me pregunto por qué no está disponible la carpeta base por algún método. – MByD

+1

@MyByD: Dile a quien escribió el objeto compartido que se examine la cabeza. – CommonsWare

Respuesta

76
PackageManager m = getPackageManager(); 
String s = getPackageName(); 
PackageInfo p = m.getPackageInfo(s, 0); 
s = p.applicationInfo.dataDir; 

Si las preocupaciones de eclipse sobre un uncaught NameNotFoundException, puede utilizar:

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

aunque utilizo una solución diferente, encontré el suyo realmente "limpio" – MByD

+2

Esto le proporciona la ruta de acceso de APK, 'sourceDir' es un desacierto desafortunado. 'dataDir' debería ser lo que estás buscando. – orip

+2

Devuelve el directorio de la aplicación, que es lo que pidió la pregunta. Intenta leer la pregunta correctamente antes de votar a la gente. –

2

Si está intentando obtener acceso a un archivo, pruebe los métodos openFileOutput() y openFileInput() como se describe en here. Abren automáticamente flujos de entrada/salida al archivo especificado en la memoria interna. Esto le permite omitir el directorio y los objetos File, lo cual es una solución bastante limpia.

+0

Gracias, pero en realidad solo trato de entender si hay una función que devuelva mi ruta de directorio de aplicaciones, la estoy usando mucho y mi solución actual es bastante fea para mí. – MByD

+0

@MByd, ah. ¡Lo siento, lo siento, no era lo que estabas buscando! –

+0

Gracias de todos modos :) – MByD

15

Tengo este

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

from here:

+1

getFilesDir devuelve un subdirectorio de datosDir – njzk2

+7

Por favor, tómese el tiempo para leer la pregunta que está respondiendo. El mecanismo getFilesDir() ya fue propuesto y rechazado como indeseable en el texto de la pregunta en sí. Además, como lo señala njzk2, no devuelve el resultado deseado a menos que tome su directorio padre, como se hizo en la pregunta. –

5

Para el paquete actual de aplicaciones para Android:

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

Para cualquier paquete:

public String getAnyDataDir(final Context context, final String packageName) throws Exception { 
    return context.getPackageManager().getPackageInfo(packageName, 0).applicationInfo.dataDir; 
} 
2

basado en la solución @ jared-madrigueras. Para cualquier paquete, pero Contexto pasando como parámetro ...

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

sólo tiene que utilizar esto en su código

context.getApplicationInfo().dataDir 
+0

Funciona muy bien en Android 5.1, gracias! Agradable y simple. –

Cuestiones relacionadas