Grant,
El problema aquí es claramente un malentendido del Modelo de Aplicación de Android. Commonsware es absolutamente correcto acerca de cómo resolver este problema. Sin embargo, sin entender los fundamentos de Android, puedo ver por qué estás teniendo dificultades para aplicarlo. Entonces, una explicación rápida:
Cada acción en Android comienza con un Intento. Esto es particularmente cierto para Actividades. Cada actividad tiene un intento. Para que la interfaz sea más fácil para los desarrolladores, puede responder a un Intento desde el SO, O puede crear un Intento de la clase Actividades para usar. En general, es una buena práctica hacer la primera opción.
En respuesta a una Intención
Para escoger una de Intención para responder a, es posible que, literalmente, responder a cualquier intento. Esto se llama una Acción. Si creé un Intento llamado "FOO", la Actividad del Bar podría recogerlo y responder. Sin embargo, tenemos convenciones, y la principal de ellas es anteponer el nombre de su paquete a cualquier intento que realice. Por ejemplo "com.company.package.FOO". En pocas palabras, esto es para evitar las colisiones con otras aplicaciones.
Cada actividad puede responder a diferentes eventos. Esto se define en 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>
arriba, también fijamos la categoría a la predeterminada, por lo que a menos que el usuario lo cambia, vamos a ser la única aplicación que responde a nuestra intención personalizado. La forma en que entonces llamamos al Intención es usando el mismo nombre que hemos creado (es decir, "com.company.package.FOO")
startActivity(new Intent("com.company.package.FOO"));
Eso es como funciona! Simplemente cambiaría el "com.company.package.FOO" anterior al nombre de su paquete (definido por su aplicación) y algo significativo. Un ejemplo es "com.testapp.ws.SWAT_FLIES".
Por qué su código no funciona
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
El código anterior busca un tipo específico de acción de Intención.Recuerde que cuando se hizo la AndroidManifest y la primera actividad se pone:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
Bueno ... getLaunchIntentForPackage() sólo tiene la intención de que la primera actividad. Es por eso que hacemos un Intento personalizado ... Primero, porque realmente no queremos que sea nuestra 3ra Actividad para ser nuestro inicio ... Y segundo, porque el sistema operativo nos dirá solo la Actividad de inicio. Tenemos que contar con nuestra propia acción (es decir, "com.testapp.ws.SWAT_FLIES")
Espero que esto ayude,
FuzzicalLogic
Gracias Mr.Fuzzical Logic para la descripción detallada. Después de referir tu explicación, he implementado la aplicación con éxito. Muchas gracias! – Grant
cómo se puede lograr esto si quiero enviar los datos de una actividad en una aplicación a un servicio en otra aplicación. – Aada
En realidad, solo necesita la acción de intención y envía los datos a través de setExtra antes de iniciar el servicio de inicio(). Es posible que tenga que construir el Intent primero (es decir, Intención myIntent = new Intent ("com.company.app.ACTION") –