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); 
  • OnActivityResult obtener RESULT_CANCELLED cuando se utiliza Intent.EXTRA_ALLOW_MULTIPLE
  • No se ha encontrado actividad para manejar la intención geográfica en el emulador
  • Android ACTION_DATE_CHANGED difusión
  • Android Video Recording, intención de la cámara
  • Cómo mantener el estado anterior de una actividad
  • Presionando el botón de nuevo llama aCrear (Android)
  • Cómo terminar mi llamada saliente.
  • ¿Qué manera de iniciar una nueva actividad es la mejor?
  • El concepto de una intención en Android?
  • Android - Actividad del logotipo de la aplicación
  • Apertura del cliente de correo electrónico a través de Intent (pero no para enviar un mensaje)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.