Можно ли получить контекст приложения в проекте библиотеки Android?
Я хотел бы получить контекст приложения, которое имеет ссылку/размещенную мою библиотеку во время выполнения внутри одного класса моего библиотечного проекта. Возможно ли это? Если да, то как?
спасибо
обновление
Я не хочу, чтобы мой пользователь передавал контекст в параметре моему проекту библиотеки, потому что возможно, что мой проект библиотеки будет вызван через JNI, и я понятия не имею, как я могу получить контекст в JNI и передать его на уровень Java.
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