Гранта,
Проблема здесь явно непонимание модели приложений для Android. Commonsware абсолютно прав, как решить эту проблему. Однако, не понимая основы Android, я могу понять, почему у вас возникают трудности с его применением. Итак, краткое объяснение:
Каждое действие в Android начинается с намерения. Это особенно актуально для деятельности. У каждой деятельности есть намерение. Чтобы упростить интерфейс для разработчиков, вы можете отвечать на Intent из ОС, или вы можете создать Intent из класса Activities для использования. В общем, лучше всего сделать первый вариант.
В ответ на Намерение
При выборе намерению, чтобы ответить на, вы можете буквально реагировать на любые Намерения. Это называется действием. Если бы я создал намерение под названием «FOO», активность Bar могла поднять его и ответить. Однако у нас есть соглашения, и главным из них является добавление имени вашего пакета к любому намерению, которое вы делаете. Например, «com.company.package.FOO». Проще говоря, это так, что мы избегаем столкновений с другими приложениями.
Каждое мероприятие может реагировать на различные события. Это определено в AndroidManifest.xml.
<activity android:name="Activity3" ... >
<intent-filter>
<action android:name="com.company.package.FOO"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Выше мы также установить категорию в DEFAULT, так что если пользователь не изменит его, мы будем единственным приложением, которое отвечает на наше пользовательском Намерение. Таким образом, что мы тогда называем Намерение состоит в использовании того же имени, которое мы создали (т.е. «com.company.package.FOO»)
startActivity(new Intent("com.company.package.FOO"));
Вот как это работает! Вы просто изменили бы вышеуказанный «com.company.package.FOO» на название вашего пакета (определенное вашим приложением) и что-то значимое. Например, «com.testapp.ws.SWAT_FLIES».
Почему ваш код не работает
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
Приведенный выше код выглядит для определенного вида Intent действия.Помните, когда вы сделали AndroidManifest и первый активность вы положили:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
Ну ... getLaunchIntentForPackage() только получает Intent для этой первой деятельности. Вот почему мы делаем индивидуальный подход ... Во-первых, потому что мы действительно не хотим, чтобы наша 3-я деятельность стала нашим началом ... И, во-вторых, потому что OS расскажет нам только о запуске Activity. Мы должны сказать это с нашим собственным действием (например, «com.testapp.ws.SWAT_FLIES»)
Надеется, что это помогает,
FuzzicalLogic
Благодарим Mr.Fuzzical Logic за подробное описание. После ссылки на ваше объяснение я успешно реализовал приложение. Спасибо огромное! – Grant
, как это может быть достигнуто, если я хочу отправить данные из одной активности в одном приложении на службу в другое приложение. ??? – Aada
На самом деле вам просто нужно выполнить намерение и отправить данные через setExtra перед тем, как вы запустите startService(). Возможно, вам придется сначала сконструировать Intent (т. Е. Intent myIntent = new Intent («com.company.app.ACTION») –