¿Es posible obtener el contexto de la aplicación en un proyecto de biblioteca de Android?

Me gustaría obtener el contexto de la aplicación que tiene referencia / alojado mi biblioteca en tiempo de ejecución dentro de una clase de mi proyecto de biblioteca. ¿Es posible? Si es así, ¿cómo?

Gracias

Actualización No quiero que mi usuario pase contexto en el parámetro de mi proyecto de biblioteca porque es posible que mi proyecto de biblioteca se llamará a través de JNI y no tengo ni idea de cómo puedo obtener contexto en JNI y pasarlo a la capa de Java.

5 Solutions collect form web for “¿Es posible obtener el contexto de la aplicación en un proyecto de biblioteca de Android?”

¿Es posible?

Sí.

Si es así, ¿cómo?

Pase como un parámetro.

No quiero que mi usuario pase contexto en el parámetro de mi proyecto de biblioteca porque es posible que mi proyecto de biblioteca se llamará a través de JNI y no tengo ni idea de cómo puedo obtener el contexto en JNI y pasarlo a la capa de Java.

Luego averiguar "cómo [usted] puede obtener el contexto en JNI y pasarlo a la capa de Java". Me imagino que lo pasarías como cualquier otro objeto. Como @Blundell señaló, en realidad no tiene ninguna otra opción.

Hay una manera más, agregue la clase de aplicación en su proyecto de biblioteca:

/** * Base class for those who need to maintain global application state. */ public class LibApp extends Application { /** Instance of the current application. */ private static LibApp instance; /** * Constructor. */ public LibApp() { instance = this; } /** * Gets the application context. * * @return the application context */ public static Context getContext() { return instance; } } 

Luego, en su proyecto regular, haga que la clase de aplicación real extienda LibApp:

 /** * Base class for those who need to maintain global application state. */ public class App extends LibApp { @Override public void onCreate() { super.onCreate(); } } 

Asegúrate de que tienes "Nombre" definido en AndroidManifest:

 <application android:name="App" ...> 

Y que su clase de aplicación está en el paquete base.

A continuación, puede utilizar LibApp.getContext () su proyecto de biblioteca para obtener el contexto de aplicación de la aplicación que está utilizando la biblioteca.

Esto puede no ser una buena solución, pero funciona para mí. Lo estoy compartiendo porque podría ser útil para alguien más.

Hay otra manera de obtener contexto en jni, ni pasar un parámetro ni guardar el contexto por ti mismo, sino mediante el uso de android api. He encontrado que hay una clase llamada:

  • Android.app.AppGlobals

En el código fuente. Y la función estática

  • GetInitialApplication

    Puede devolver un objeto de Application . Pero debe ser llamado en el hilo principal, y la clase está oculta. De todos modos puede usarlo reflejando en java. Y sólo puede utilizar FindClass() y FindStaticObjectMethod() para encontrar el método y utilizarlo. Espero que ayude.

En su proyecto de biblioteca agregue una dependencia a su proyecto principal. En IntelliJ lo hará por usted cuando intente hacer referencia a esta variable global. En Eclipse no estoy seguro …

Lo pasaría como un parámetro o le pasaría un singleton en esa biblioteca.

Tener la aplicación principal aplicación extender la clase de aplicación de la biblioteca es una mala idea coz en java sólo se puede extender una vez de una clase. Si su aplicación requiere pasar a otra biblioteca usted estará en problemas.

  • ¿Cómo hacer que Proguard ignore las bibliotecas externas?
  • ¿Cómo usar bincentro jcenter para publicar la biblioteca android gratis? Me pide que registre una organización y pague después de un mes
  • No se puede resolver el error de superclase al hacer referencia a la biblioteca .jar
  • ¿Cómo evitar que los recursos y el código no utilizados de un proyecto de una biblioteca de Android entren en mi APK?
  • BlurBehind - No se pudo encontrar en las dependencias de Android Studio
  • Eclipse no reconocerá el proyecto como biblioteca (ActionBarSherlock / ViewPagerIndicator)
  • ¿Es Icepick roto?
  • La finalización del código no funciona para los atributos XML de la biblioteca externa (Android Studio)
  • No se puede resolver el símbolo AppCompatActivity - ¿No se reconocen las bibliotecas de soporte v7?
  • Cómo obtener una vista previa de Custom Font Android Studio (con caligrafía)
  • ¿Cómo asegurarse de que el código de proyecto de la biblioteca de android se ejecuta sólo en una de las aplicaciones instaladas que lo integran?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.