Вызов класса из одного проекта в другом проекте?

#android #eclipse #google-maps

#Android #eclipse #google-карты

Вопрос:

Я очень новичок в eclipse и разработке Android в целом, и мне нужна помощь со следующим. Я создал два проекта Android в Eclipse с Android SDK:

  1. «Проект ORF401» — предназначен для платформы Android 2.2
  2. «Map Project» — нацелен на платформу Google APIs 2.2

Я выполнил шаги, указанные в стандартном руководстве Hello World по картам Google для Android, и получил карту Google для отображения в эмуляторе при запуске второго проекта.

В 1-м проекте у меня настроено меню, для которого одним из вариантов является загрузка карты. Однако я не уверен, как загрузить карту в рамках этого проекта, поскольку для каждого проекта может быть указана только одна цель сборки, и поэтому я не могу указать Google Maps API в качестве (дополнительной) цели сборки. Есть ли способ вызвать main .класс Java из второго проекта в рамках первого проекта? Я вижу, где можно сделать ссылку на 2-й проект в свойствах проекта, но я не уверен, как это использовать. Одним из возможных решений, которое я нашел в Интернете, было добавление следующего кода в поле switch в первом проекте:

 Intent intent = new Intent(this, {googleMap}.class);  
startActivity(intent);
  

Я полагаю, для этого потребуется дополнительный googleMap.java класс в первом проекте, а также другое действие, но я не могу заставить его работать. Кто-нибудь может предложить, как я могу это сделать?

Если код для одного или обоих проектов поможет, я буду рад опубликовать его. Спасибо

Ответ №1:

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

Первое, что я бы посоветовал — внимательно прочитайте о действиях и намерениях. Перейдите к http://developer.android.com — все четко объяснено. Когда все прояснится, вы увидите смысл в создании некоторой кнопки, нажатие на которую открывает новый экран с разработанной вами функцией отображения. А затем давайте вернемся назад или сделаем что-нибудь еще, например, откроем новый экран, браузер и т.д.

И откажитесь от попыток вызвать другой проект из другого 🙂 Я думаю, вы хотите делать что-то не так.

Просто чтобы убедиться, что меня не поняли неправильно — конечно, вы могли бы захотеть иметь два проекта. Но это, скорее всего, приведет к двум отдельным приложениям. К счастью, приложения также могут взаимодействовать с помощью intents, или контент-провайдеров, или еще парочки. Просто посмотрите, как приложение «Контакты» переводит вас в приложение GMail, если вы хотите отправить электронное письмо. Если это то, чего вы хотите достичь — все равно нужно прочитать о намерениях.

Редактировать:
Вот ссылка, о которой я упоминал в комментариях:
http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
В нем объясняется, как достичь «дополнительной цели», которую вы хотели бы иметь.

Комментарии:

1. есть причины для разделения проектов

2. Я только что добавил последний абзац. Может быть, это правильный путь для тебя, @Brandon?

3. @binnyb вы правы, но нужно помнить две вещи: проект, на который ссылается, потеряет возможности использовать свои ресурсы в действиях; целевую платформу все равно придется установить. Есть способ обеспечить условное использование библиотек, подробнее об этом в блоге команды разработчиков Android.

4. По какой-то причине, когда я создаю новое действие и пытаюсь запустить его, используя объект intent (как описано в: androidcompetencycenter.com/2009/03 / … ), Я получаю сообщение об ошибке, в котором говорится, что процесс столкнулся с неожиданной ошибкой и был вынужден закрыться. Не уверен, почему. Я закодировал намерение перейти к новому действию в структуре switch case (не при нажатии кнопки), но я не могу представить, что именно это вызывает ошибку. Если я не смогу получить его к концу ночи, я могу опубликовать новое сообщение с включенным кодом. Спасибо за помощь, господа

5. Я был немного занят сном, поэтому не смог вам помочь. Надеюсь, вам удалось прочитать о XML-файле Android manifest, в который вы должны включить названия действий, которые вы хотите иметь возможность запускать.

Ответ №2:

Есть способы вызвать класс из одного проекта в другой проект, но здесь возникают более серьезные проблемы. Первый проект может выполняться на любом устройстве Android. Для второго, однако, требуются API Google Maps. Вы все равно не сможете его вызвать, потому что его нельзя установить, если вы не находитесь в среде, поддерживающей API Google. В этом действительно нет никакой пользы, если только у вас нет дополнительной функциональности в project 1, такой, что она может существовать без project 2.

Я бы предложил использовать метод Intent, а не пытаться взломать что-то вместе, что позволяет вам получить доступ к другому классу. Несмотря на это, хотя объединение этих двух вместе таким образом кажется чрезмерно сложным и подверженным ошибкам. Я бы предложил просто встроить функциональность сопоставления в project 1 и потребовать API Google. Большинство основных устройств поддерживают их в любом случае.

Если вы женаты на идее создания двух отдельных проектов с разными целями сборки, я бы посоветовал рассмотреть возможность использования BroadcastReceivers с пользовательским намерением, которое вы транслируете из приложения 1. Я не верю, что startActivity будет работать через границы приложения из-за проблем с загрузчиком классов, но я могу ошибаться на этот счет.

Комментарии:

1. Спасибо за ответ. Не могли бы вы точно описать, что вы подразумеваете под внедрением функциональности сопоставления в project 1 и требованием API Google? Я попытался добавить uses-library и разрешение на доступ в Интернет в manifest xml проекта 1 и установить Google API в качестве цели сборки (а не Android 2.2), но это приводило к ошибкам, которые я не мог устранить. Могу ли я добавить extends MapActivity к основному . класс java (соответствующий activity, который я создал для project 1) или создать совершенно новый класс и скопировать содержимое из project 2?

2. Как насчет экспорта project 2 в a . jar и добавление .jar в библиотеку по пути сборки? Позволит ли это мне вызвать класс из project 2 без необходимости вносить целую кучу изменений? Я работаю над этим прямо сейчас, поэтому, если я разберусь, я опубликую это снова и дам вам знать

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