2016-01-19 4 views
5

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

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

MainFest в основной настройке приложения:

<activity 
    android:name="com.example.myLibraryModule.SplashScreen" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

манифеста запускает заставку, которая в настоящее время находится в моем модуле библиотеки.

Поскольку библиотека является зависимой от основного приложения, а не наоборот, я не уверен, как начать запуск MainActivity из моего SplashScreenActivity. Это не так просто, как:

Intent i = new intent(this, MainActivity.class); 
startActivity(i); 

ответ

2

Я бы удалить SplashScreenActivity из основного манифеста и создать protected метод, называемый startMainActivity() или так. Вызовите этот метод в своем базовом классе SplashScreenActivity в месте, которое вы обычно хотели бы начать с MainActivity.

Тогда в вашем основном проекте я бы подкласса SplashScreenActivity и переопределил метод startMainActivity() для выполнения вашего поведенческого поведения. Не забудьте поставить подкласс SplashScreenActivity внутри манифеста вашего основного проекта.

Этот способ позволяет легко использовать поведение SplashScreenActivity во всех ваших проектах, которые могут зависеть от него.

+0

Для выяснения причин, я удаляю SplashScreenActivity из манифеста модуля MODULE? Затем я создаю активность заставки в основном приложении, которое расширяет SplashScreenActivity? Затем я помещаю все данные обработки, которые обычно выполняются в активности заставки в этом методе 'startMainActivity(). Оттуда я могу начать свою основную деятельность. edit: и в манифесте моего основного проекта я заменяю SplashScreenActivity из модуля активностью, которую я только что создал в своем основном проекте? –

+0

Да, это так. Не забудьте вызывать метод 'startMainActivity()' внутри вашей базы 'SplashScreenActivity' в тот момент, когда вы обычно начинаете свою деятельность. –

+1

Хорошо, это был не такой болезненный способ добиться этого. Я тестировал это решение, и оно работает! –

0

Вы не должны этого делать. Вы решительно связываете эти два класса (класс, начинающий деятельность из библиотеки lib и загружаемую активность.

Вместо этого вы можете настроить широковещательный прием в приложении, который получит объект намерения и начнет действие для Если вы в будущем захотите, чтобы другие действия или службы запускались удаленно, вы сможете использовать один и тот же широковещательный приемник для приема запросов из вашей библиотеки. Все, что вам нужно сделать, это добавить данные в Intent's Дополнительно коллекция, которая будет содержать которая активность открыть (или любые другие задачи, конечно).

Это решение де-пары вашей библиотеки, и приложение, это лучше архитектура Wize (на мой взгляд).

Удачи!

+0

Это может стать нескромным, если вы хотите, чтобы анимация перехода из одного приложения из «SplashScreenActivity» была включена в «MainActivity» вашего приложения. Также включает регистрацию такого «BroadcastReceiver» внутри манифеста, который ИМО является излишним для этой простой проблемы. –

+0

Это действительно вопрос мнения. Это решение не является сложным. его относительно просто реализовать, и у него есть свои преимущества. Думаю, h_k нужно взвесить плюсы и минусы. – FunkSoulBrother

Смежные вопросы