screenorientation - androidmanifest.xml editar
android.content.ActivityNotFoundException: (23)
Obtengo esta excepción mientras trato de llamar a una actividad de otra. La excepción completa es
android.content.ActivityNotFoundException: no se puede encontrar la clase de actividad explícita {com.xy / com.xyclass};
Estoy haciendo un intent.setClass("com.xy","com.xyclassName")
donde className
es el nombre de mi clase de actividad y com.xy
es el paquete en el que reside.
Mi AndroidManifest.xml tiene el siguiente contenido:
<activity android:name="com.x.y.className" android:label="@string/app_name">
¿Me estoy perdiendo algo?
Además de la respuesta de Mina. Cuando declaras actividad como clase estática interna, debes escribir tu actividad en manifiesto como ...
<activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />
aquí .app viene del nombre de tu paquete, puede ser .helpers.afdfa $ afda
Agregué una nueva actividad y la definí en manifest.xml, pero todavía recibía el error "No se puede encontrar la clase de actividad explícita". Estoy usando Eclipse. La solución para mi problema fue "limpiar" el proyecto. Desde el menú principal en Eclipse: Proyecto | Limpiar ... A continuación, seleccione su proyecto y límpielo.
Consulte el contenido del archivo de manifiesto de Android en la carpeta bin del proyecto. Cuando su aplicación se compila y se empaqueta, el archivo de manifiesto se copia en la carpeta bin. En mi caso, el Manifiesto en la carpeta bin no estaba de acuerdo con el Manifiesto original. Esto es probablemente un error de Eclipse. Copié manualmente el Manifiesto a la carpeta bin y funcionó.
Elimine su actividad del manifiesto y luego agréguelo nuevamente. Este tipo no escribir escribe el XML directamente. En su lugar, vaya a Application > Application nodes > add
, elija la Actividad y busque el origen del archivo.
Esto funcionó para mí.
Esta excepción también ocurre si incluye una biblioteca en su aplicación y si la biblioteca llama a una actividad definida en el proyecto de la biblioteca. En este caso, necesitamos fusionar el manifiesto de la biblioteca con el manifiesto de la aplicación de llamada.
Con la versión 20 de ADT, podemos hacer esto agregando la declaración siguiente en project.properties de la aplicación que llama.
manifestmerger.enabled = true
Estaba usando getActivityContext()
(en lugar de Activity.this
) para el código del menú para guardar algo de trabajo y copiarlo y pegarlo en cada actividad sin editar cada vez.
Los reemplacé con Activity.this
, y el problema desapareció.
Tengo la sensación de que un tipo de Android más inteligente podría evitar tener que hacer eso. Me gustaría escuchar lo que sería.
Esto funciona si tiene un objeto Activity (que debe iniciar):
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
Intenta usar lo siguiente:
intent.setClassName("com.x.y", "com.x.y.className");
Esto funciona para mí
La actividad a la que llamas no contiene "sheme" y contiene filtro de intención:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.sj.myapplication.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
así que en el código de llamada:
Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
La actividad que está llamando debe aparecer no solo en el Manifiesto para su propio paquete, sino también en el paquete Manifiesto para el LLAMADO.
Mi solución a este error fue agregar un nombre de paquete en frente del nombre en manifiesto.
Tenía las siguientes actividades:
id.scanner.main.A1
id.scanner.main.gallery.A2
Mi manifiesto contenía lo siguiente:
<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>
Esto resolvió el problema:
<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>
Mirando la documentación here lo que quieres es:
intent.setClassName("com.x.y", "className");
Oye, necesitas usar otra forma de constructor de intenciones. Esto seguramente resolverá su problema en un segundo:
Ejemplo:
Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");
startActivity(inte);
Esto funciona perfectamente y revisé este código, está funcionando correctamente.
Reinicia el Eclipse y revisa tu Manifestfile nuevamente. Si encuentra que le falta la actividad correspondiente, agréguela e intente de nuevo. Solucionó mi problema similar.
Sí, tengo este problema también. Actualicé el proyecto. Y luego, todo funciona bien.
Si otras personas encuentran algo similar y llegan a esta publicación, un problema que tuve podría ahorrarle algo de tiempo. Puede no estar relacionado con el problema del OP pero def relacionado con la excepción ActivityNotFound.
Intentaba cargar una actividad usando:
Intent intent = new Intent( this, class );
Sin embargo, continuamente seguí obteniendo la ActivityNotFoundException
a pesar de que había verificado y vuelto a verificar el código varias veces.
Esta excepción que recibía no estaba causada por la intención sino por algún código que estaba ejecutando dentro de la actividad cargada arrojando una RuntimeException
. (mi problema fue causado por Typeface.createFromAsset()
)
Es posible que se encuentre con una RuntimeException similar en su actividad.
Para ver si este es el caso, coloque su código de intención en los bloques de captura de prueba. Al igual que:
try {
/* your code */
...
} catch ( ActivityNotFoundException e) {
e.printStackTrace();
}
Ejecute nuevamente su aplicación y revise su LogCat, si es el mismo problema, obtendrá una RuntimeException con una entrada "Causada por:" que apunta a su problema real.
Pasé una buena hora tratando de resolver esto. Con suerte, esto puede salvar a alguien en algún momento.
Tal vez deba verificar que agregó la nueva actividad al archivo manifest.xml
Ejemplo:
<activity
android:name=".className"
android:label="@string/app_name" >
</activity>
Tenía una ActivityNotFoundException cuando implementé la actividad dentro de otra clase (como una clase interna):
//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
//...
Declarado como el siguiente dentro del manifiesto:
<activity android:name=".Pref.Activity"
...
Después de declarar esto como una clase normal (clase pública PrefActicity) y cambiar el manifiesto en consecuencia, funcionó como de costumbre.
Tengo el mismo caso también. Después de leer la respuesta de thepearson, revisé mi actividad y descubrí que escribí
public void onCreate(Bundle s)
Pero de hecho debería ser
protected void onCreate(Bundle s)
Y funciona ahora!
Tuve el mismo problema. Intenté todo, pero el error, que resolví más tarde, fue que quedaba un espacio entre comillas dobles y mi nombre de clase. Tiene que ser: intent.setClassName("com.xy","com.xyclassName")
no
intent.setClassName("com.x.y"," com.x.y.className")
cuando tengo el mismo problema Si está utilizando archivos de clase de biblioteca y los escribe en archivos de manifiesto de Android, escríbalo como y luego elimine los archivos de manifiesto de proyectos de biblioteca esta porción >> entonces funcionará absolutamente.
intent.setClass toma los parámetros como "Contexto del paquete" y "Clase". un ejemplo sería:
intent.setClass(CurrentActivity.this, TargetActivity.class);
también necesita verificar si la actividad está registrada en el archivo de manifiesto.
puedes agregar este código en el archivo manifiest.xml
action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"