Soy consciente de la disponibilidad de Context.getApplicationContext () y View.getContext () , a través del cual puedo llamar a Context.getPackageName () para recuperar el nombre del paquete de una aplicación.
Funcionan si llamo desde un método para el cual a View
o un Activity
objeto está disponible, pero si quiero encontrar el nombre del paquete desde una clase totalmente independiente con no View
o Activity
, ¿hay alguna manera de hacerlo (directa o indirectamente)?
android
package
android-context
ef2011
fuente
fuente
Respuestas:
Una idea es tener una variable estática en su actividad principal, instanciada para ser el nombre del paquete. Entonces solo haga referencia a esa variable.
Tendrá que inicializarlo en el
onCreate()
método de la actividad principal :Global a la clase:
Entonces..
Luego puede acceder a través de
Main.PACKAGE_NAME
.fuente
final
hace inmutable, inicializable solo en un constructor y solo una vez .onCreate()
No es un constructor. Corrija si me equivoco.onCreate
tendrá que volver a llamarse de todos modos, por lo que esta solución aún no debería ser un problema.Si usa el complemento gradle-android-para construir su aplicación, entonces puede usar
para recuperar el nombre del paquete desde cualquier ámbito, incl. uno estático
fuente
Si con la palabra "en cualquier lugar" quiere decir sin tener un explícito
Context
(por ejemplo, de un hilo de fondo) debe definir una clase en su proyecto como:Luego, en su
manifest
necesita agregar esta clase alName
campo en laApplication
pestaña. O edite el xml y pongay luego desde cualquier lugar al que puedas llamar
Espero eso ayude.
fuente
Application.onCreate()
se ha modificado para reflejar esto: ahora declara específicamente "Llamado cuando la aplicación se está iniciando, antes de cualquier actividad, servicio u objeto receptor (excluyendo proveedores de contenido)".Si usa Gradle Build, use esto:
BuildConfig.APPLICATION_ID
para obtener el nombre del paquete de la aplicación.fuente
fuente
Puede obtener el nombre de su paquete de esta manera:
Aquí están las opciones:
fuente
Puede usar el método no documentado
android.app.ActivityThread.currentPackageName()
:Advertencia: Esto debe hacerse en el hilo principal de la aplicación.
Gracias a esta publicación de blog por la idea: http://blog.javia.org/static-the-android-application-package/ .
fuente
Para aquellos que usan Gradle, como mencionó @Billda, puede obtener el nombre del paquete a través de:
Esto le da el nombre del paquete declarado en su aplicación gradle:
Si está interesado en obtener el nombre del paquete utilizado por sus clases de Java (que a veces es diferente de
applicationId
), puede usarSi no está seguro de cuál usar, lea aquí :
fuente
Espero que funcione.
fuente
Cree un módulo java para que se ejecute inicialmente al iniciar su aplicación. Este módulo ampliará la clase de aplicación de Android e inicializará cualquier variable de aplicación global y también contendrá rutinas de utilidad para toda la aplicación:
Por supuesto, esto podría incluir lógica para obtener el nombre del paquete del sistema Android; Sin embargo, lo anterior es un código más pequeño, más rápido y más limpio que obtenerlo de Android.
Asegúrese de colocar una entrada en su archivo AndroidManifest.xml para indicarle a Android que ejecute su módulo de aplicación antes de ejecutar cualquier actividad:
Luego, para obtener el nombre del paquete desde cualquier otro módulo, ingrese
El uso de un módulo de aplicación también le brinda un contexto para los módulos que necesitan pero no tienen un contexto.
fuente
Use: BuildConfig.APPLICATION_ID para obtener el NOMBRE DEL PAQUETE en cualquier lugar (es decir, servicios, receptor, actividad, fragmento, etc.)
Ejemplo: String PackageName = BuildConfig.APPLICATION_ID;
fuente
Solo importa Android.app, luego puedes usar:
<br/>Application.getProcessName()<br/>
Obtenga el nombre del proceso de aplicación actual sin contexto, vista o actividad.
fuente