Как начать основную деятельность из библиотеки?

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


person user1132897    schedule 20.08.2012    source источник


Ответы (4)


Я считаю, что это самый простой ответ: вам понадобится объект, существующий в библиотеке, который вы можете расширить в своем проекте.

Представьте, что в вашей библиотеке есть приложение LibraryApplication, которое расширяет ваше ProjectApplication. LibraryActivity может вызывать:

((LibraryApplication)getApplication()).startNewActivity(this, "goHome")

Ваше приложение ProjectApplication реализует этот новый метод:

public void startNewActivity(Context context, String action) {
    if("goHome".equals(action)) {
        startActivity(context, ProjectHomeActivity.class);
    }
}
person FunkTheMonk    schedule 20.08.2012
comment
Кажется, что если я это сделаю, расширенный класс никогда не будет вызван. Он вызывает только то, что у меня есть в проекте библиотеки. Мне нужно сделать метод абстрактным или что-то в этом роде? - person user1132897; 20.08.2012
comment
Возможно ли вызвать функцию внутри основного проекта из проекта библиотеки. - person vishnupriyan; 17.03.2015

Есть несколько возможных решений.

Лучше всего зарегистрировать фильтр намерений в записях манифеста для действий. которые вы хотите сделать доступными для других ваших проектов. Существует отличное руководство по фильтрам намерений здесь.

Другой вариант — передать класс в проект библиотеки и использовать Intent (Context packageContext, Class cls), чтобы создать намерение для запуска и запуска действия. Однако использование фильтров намерений было бы лучшей практикой и опытом обучения.

Удачи!

person Zambotron    schedule 20.08.2012
comment
Будет ли это работать, если на одном телефоне установлено несколько приложений? Скажем, у меня также есть Project B, установленный на том же телефоне, сможет ли этот метод работать для них обоих? - person user1132897; 20.08.2012
comment
Вы можете использовать createChooser, чтобы открыть экран выбора, деятельность, которую вы хотите обработать намерение. Вы можете узнать, существует ли действие для обработки намерения:Intent.resolveActivity - person Zambotron; 20.08.2012

Вы можете добавить проект как внешнюю библиотеку. Также вы можете использовать maven для такого рода вещей.

person Piotr Ślesarew    schedule 20.08.2012

Из простого и хорошего ответа:

try {
   startActivity(new Intent(this, Class.forName("com.package.HomeActivity")));
 } catch (ClassNotFoundException e) {
    e.printStackTrace();
 }

А также возможно с помощью этого ответа, используя действия.

person Pablo Cegarra    schedule 07.09.2018