Ответ 1
Грант
Проблема здесь явно непонимание модели приложений для 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, так что, если пользователь не изменит ее, мы будем единственным приложением, отвечающим нашему пользовательскому намерению. Способ, которым мы тогда называем Intent, заключается в использовании ИМЯ ИМЯ, которую мы создали (то есть "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");
Вышеприведенный код ищет конкретное действие KIND of Intent. Помните, когда вы создали AndroidManifest и первое действие, которое вы указали:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
Ну... getLaunchIntentForPackage() получает только намерение для этого первого действия. Это ПОЧЕМУ мы делаем индивидуальное намерение... Во-первых, потому что мы действительно не хотим, чтобы наша 3-я деятельность стала нашим началом... И во-вторых, потому что OS расскажет нам только о запуске Activity. Мы должны сказать это с помощью нашего СОБСТВЕННОГО действия (т.е. "Com.testapp.ws.SWAT_FLIES" )
Надеюсь, что это поможет,
FuzzicalLogic