Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿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.

  • Android studio agregar proyecto externo a build.gradle
  • Requiere el proyecto Gradle desde otro directorio
  • Android _ La importación android.support.v7.graphics no se puede resolver?
  • Mi R en la biblioteca es rojo, pero puedo crear y ejecutar la aplicación normalmente
  • Gradle: pros / contras añadiendo dependencias
  • Uso de un proyecto de biblioteca de Android Actividad dentro de otro proyecto
  • Convertir proyecto existente en proyecto de biblioteca en Android Studio
  • Recursos de importación android de proyecto de biblioteca
  • 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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.