No se puede iniciar nuevo intento por setClassName con un paquete diferente en Android

Quiero iniciar una nueva Intención dinámicamente. Por setClassName tanto, setClassName parece la mejor opción.

En primer lugar, defino 3 actividades en Manifest

 <activity android:name="com.example.pkg2.Act" /> <activity android:name="com.example.pkg1.Act1" /> <activity android:name="com.example.pkg1.Act2" /> 

Desde com.example.pkg2.Act :

 Intent intent = new Intent(); if(index == 0) intent.setClassName(Act.this, "com.example.pkg1.Act1"); else intent.setClassName(Act.this, "com.example.pkg1.Act2"); startActivity(intent); 

Y obtendrá esta excepción:

 Unable to find explicit activity class {com.example.pkg2.Act/com.example.pkg1.Act1}; have you declared this activity in your AndroidManifest.xml? 

Parece que sólo podemos usar setClassName para iniciar dinámicamente nueva Actividad pero dentro del mismo paquete.

¿Alguna idea para resolver este problema? Toda la ayuda es apreciada.

SetClassName toma un contexto de paquete como primer setClassName(Context packageContext, String className) :

 Intent intent = new Intent(); if(index == 0) intent.setClassName("com.example.pkg1", "com.example.pkg1.Act1"); else intent.setClassName("com.example.pkg1", "com.example.pkg1.Act2"); startActivity(intent); 

y en

 <activity android:name="com.example.pkg2.Act" /> <activity android:name="com.example.pkg1.Act1" /> <activity android:name="com.example.pkg1.Act2" /> 

O intenta esto:

 if(index == 0) { Intent intent = new Intent(Intent.ACTION_MAIN).addCategory( intent.CATEGORY_LAUNCHER).setClassName("com.example.pkg1", "com.example.pkg1.Act1").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .addFlags(Intent.FLAG_FROM_BACKGROUND).setComponent(new ComponentName("com.example.pkg1", "com.example.pkg1.Act1")); getApplicationContext().startActivity(intent); } else { Intent intent = new Intent(Intent.ACTION_MAIN).addCategory( intent.CATEGORY_LAUNCHER).setClassName("com.example.pkg1", "com.example.pkg1.Act2").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .addFlags(Intent.FLAG_FROM_BACKGROUND).setComponent(new ComponentName("com.example.pkg1", "com.example.pkg1.Act2")); getApplicationContext().startActivity(intent); } 

El primer param es el applicationId ubicado en el archivo build.gradle

El segundo parámetro es el camino completo de la clase con su paquete. Por ejemplo: intentObj.setClassName ("applicatioId", "com.youCompany.yourAppName.YourClassName")

Siga la sintaxis para escribir el método setClassName ():

  setClassName( pkgName, className ) 

Puede utilizar el siguiente método para crear la intención en el contexto del paquete:

  Intent intent = new Intent(this, MyActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

De esta manera se mantiene el código genérico.

HTH

Intent.setClassName (packageName, className);

dónde
PackageName: nombre del paquete que implementa el componente deseado, es decir, el paquete al que pertenece la persona que llama.
ClassName – nombre completo de la clase [de un paquete diferente]

Llamando desde com.example.pkg2.Act :

 intent.setClassName("com.example.pkg2", "com.example.pkg1.Act1"); 

Usa este código y estarás bien.

 Intent intent = new Intent(); String resourcePackageName = getResources().getResourcePackageName(R.string.some_defined_resource); intent.setClassName(getApplicationContext().getPackageName(),resourcePackageName + ".SubPackageName[/if any/].ClassName"); startActivity(intent); 

También puede iniciar Actividades de esta manera. Prueba esto

 Intent intent = new Intent(); Class<?> activityClass = Class.forName("your.application.package.name." + NameOfClassToOpen); intent.setClass(this, activityClass); 

Y para usar setClassName . Debe proporcionarlo con packageName y su ruta de acceso de clase también

 intent.setClassName("your.application.package.name", "your.application.package.name.activityClass"); 
 intent.setClassName(Act.this, Act1.class); 
  • Cuales son los indicadores de uso de Android
  • Transmisión de datos a través de la intención utilizando Serializable
  • Android: enviar SMS a través de la intención con el cuerpo y volver.
  • Alternativa a Intent.FLAG_ACTIVITY_CLEAR_TASK
  • Intentos extras que faltan cuando comenzó la actividad
  • Elija un directorio / archivo utilizando Intent.ACTION_CREATE_DOCUMENT (Storage Access Framework)
  • ¿Cómo puedo pasar los datos de un BroadcastReceiver a una actividad iniciada?
  • ¿Cómo detectar las aplicaciones de Android que pueden manejar la acción de intención solicitada?
  • Escuchar el acceso a la ubicación desactivar / activar en la configuración
  • Cómo capturar el nuevo intento en onNewIntent ()?
  • ¿Cómo llevar una actividad al primer plano (parte superior de la pila)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.