Можно ли получить контекст приложения в проекте библиотеки Android?



Я хотел бы получить контекст приложения, которое имеет ссылку/размещенную мою библиотеку во время выполнения внутри одного класса моего библиотечного проекта. Возможно ли это? Если да, то как?



спасибо



обновление
Я не хочу, чтобы мой пользователь передавал контекст в параметре моему проекту библиотеки, потому что возможно, что мой проект библиотеки будет вызван через JNI, и я понятия не имею, как я могу получить контекст в JNI и передать его на уровень Java.

436   5  

5 ответов:

это возможно?

да.

если да, то как?

передать его в качестве параметра.

Я не хочу, чтобы мой пользователь передавал контекст в параметре моему проекту библиотеки, потому что возможно, что мой проект библиотеки будет вызван через JNI, и я понятия не имею, как я могу получить контекст в JNI и передать его на уровень Java.

затем выясните "как [вы] можете получить контекст в JNI и передать его в Java слоя". Я бы предположил, что вы передадите его, как и любой другой объект. Как отметил @ Blundell, у вас действительно нет другого варианта.

есть еще один способ, добавление класса в проект библиотеки:

/**
 * 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;
  }

}

потом в свой очередной проект, сделать уроки настоящего приложения распространяется LibApp:

/**
 * Base class for those who need to maintain global application state.
 */
public class App extends LibApp {

  @Override
  public void onCreate() {
    super.onCreate();
  }

}

убедитесь, что у вас есть "имя", определенное в AndroidManifest:

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

и что ваш класс приложения находится в базовом пакете.

затем вы можете использовать LibApp.getContext () проект библиотеки, чтобы получить контекст приложения, которое использует библиотека.

Это не может быть хорошим решением, но это работает для меня. Я делюсь им, потому что это может быть полезно кому-то еще.

есть еще один способ получить контекст в jni, не передавая параметр и не сохраняя контекст самостоятельно, а используя api android. Я обнаружил, что есть класс с именем:

  • android.приложение.AppGlobals

в исходном коде. И статическая функция

  • getInitialApplication

    вернуть

в проекте библиотеки добавьте зависимость к основному проекту. В IntelliJ он сделает это за вас, когда вы попытаетесь ссылаться на эту глобальную переменную. В затмении я не уверен...

Я бы передал его в качестве параметра или передать его синглтон в этой библиотеке.

имея основное приложение приложения расширить класс приложения библиотеки является плохой идеей coz в java вы можете расширить только один раз из класса. Если ваше приложение требует, чтобы перейти в другую библиотеку вы будете в беде.

Comments

    Ничего не найдено.