2010-04-30 12 views
13

Tengo la actividad A en el paquete uno, y deseo ejecutar un intento que aumentará una actividad B que está en el paquete dos.actividades de inicio del paquete diferente

¿Cómo puedo hacer esto? Cualquier muestra será bienvenida.

esto es lo que he hecho yo, y el error que consigo:

primera actividad ("MainActivity") en un paquete: com.abelski.currencyclient y segunda actividad ("SecondActivity" en un paquete diversa: com .idan.second

ahora quiero llamar desde MainActivity a SecondActivity

ive añadió esta línea en el manifiesto de la MainActivity:.

<activity android:name="com.idan.second.SecondApplicationActivity"></activity> 

ahora en la actividad principal tiene este botón que se ejecutan esta línea:

Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class); 

y esta es la rror:

04-29 09:20:59.197: ERROR/AndroidRuntime(399): Uncaught handler: thread main exiting due to uncaught exception 
04-29 09:20:59.276: ERROR/AndroidRuntime(399): java.lang.NoClassDefFoundError: com.idan.second.SecondApplicationActivity 
04-29 09:20:59.276: ERROR/AndroidRuntime(399):  
+0

Encuentro uso de "paquete" confuso aquí; paquete que significa paquete o aplicación java paquete de iones? – Samuh

+0

Por favor revise mi pregunta nuevamente, ive edit it. – rayman

Respuesta

19

Supongo que por "paquetes" se entiende las aplicaciones.

tenemos: - ApplicationA con FirstActivity - ApplicationB con SecondActivity

Si, en el archivo AndroidManifest.xml del ApplicationB, en la declaración de SecondActivity se agrega un filtro intención tales como:

<activity android:name=".SecondActivity"> 
    <intent-filter> 
    <action android:name="applicationB.intent.action.Launch" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

Puede crear una intención para iniciar esta actividad secundaria desde FirstActivity con:

Intent intent = new Intent("applicationB.intent.action.Launch"); 
startActivity(intent); 

Lo que esto significa es:

  • El SecondActivity tiene un filtro para la acción intención de "applicationB.intent.action.Launch"
  • Cuando se crea una intención con la que la acción y llama 'startActivity' del sistema encontrarán la actividad (si los hay) que responde a ella

la documentación para esta está en: https://developer.android.com/reference/android/content/Intent.html

+0

Gracias por su ayuda. – rayman

+0

Dime que crees que hay una manera de iniciar esta aplicación sin GUI? solo para lanzarlo al fondo? – rayman

+0

Creo que deberías tener un servicio para eso. Puede consultar la documentación en: https://developer.android.com/reference/android/app/Service.html – rcabaco

0

Use las intenciones explícitas:

Intent intent = new Intent(context,ClassName.class); 

donde NombredeClase es de otro paquete

A veces, no sabrá el nombre de la clase en tales casos, tendrá que confiar en la intención que la clase objetivo publicita manejar.

+2

no funcionó, por favor revise mi pregunta de nuevo, he editado. – rayman

9

que tenían el mismo problema y la solución fue otro nivel en la raíz de su nombre de paquete.

Si tiene dos paquetes "com.first ...." y "com.second ...", y el manifiesto hace referencia a "com.first". Luego puede refactorizar ambos paquetes para reutilizar la primera parte. Por ejemplo, "com.package.. Primero" y 'com.package.second' A continuación, el manifiesto también tiene que ser actualizado

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.package"> 
... 

    <activity android:name=".first.FirstPackageActivity" android:label="FirstPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".second.SecondPackageActivity" android:label="SecondPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

Su código Java puede crear una intención y comenzar la actividad de la forma habitual:

Intent intent = new Intent(this,ActivityClassName.class); 
startActivity(intent); 
Cuestiones relacionadas