ActivityNotFoundException (sì, questa attività è dichiarata in AndroidManifest.xml)
-
27-10-2019 - |
Domanda
Ho trovato alcuni thread che segnalano un problema simile ma nessuno di loro Offre davvero qualcosa che non ho già provato.
Un'innocente chiamata tale:
mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));
Con il seguente Androidmanifest.xml:
<application>
<activity android:name="MyActivityLib" />
<activity android:name="com.example.baseapp.MyEditPreferences" android:label="@string/app_name">
</activity>
</application>
Innesca la seguente eccezione:
06-14 14:06:50.297: ERROR/AndroidRuntime(9272):
android.content.ActivityNotFoundException: Unable to find explicit activity class
{com.example.baseapp.paypal/com.example.baseapp.MyEditPreferences};
have you declared this activity in your AndroidManifest.xml?
Le cose è che questo codice è stato utilizzato in modo impeccabile prima di cambiarlo da un progetto di applicazione monolitica a un progetto in 2 parti che comprende da un progetto di biblioteca e da un progetto di applicazione.
Androidmanifest.xml è quello in biblioteca progetto.
Di cosa ho bisogno per eliminare questo ActivityNotFoundException
?
Soluzione
Ho appena risolto il problema.
Tutto quello che dovevo fare era aggiungere il FQN al Applicazione Progetto AndroidManifest.xml
:
<activity android:name="com.example.baseapp.MyEditPreferences"
android:label="com.example.baseapp.MyActivityLib:string/app_name">
</activity>
In effetti, ho rimosso qualsiasi riferimento a MyEditPreferences
nel Biblioteca Progetto AndroidManifest.xml
completamente e funziona ancora.
Funziona anche con l'istruzione originale StartActivity 1-line:
mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));
Conclusione: è l'applicazione AndroidManifest.xml
Questo è importante, non di quella della biblioteca.
Altri suggerimenti
Forse questo funzionerà?
Intent mIntent = new Intent();
mIntent.setClassName(mActivity, "com.example.baseapp.MyEditPreferences");
mActivity.startActivity(mIntent);
Se usi classi quali nomi sono inclusi in un pacchetto Android (impostazioni, preferenze, attività, ...), dovrai dirlo:
Intent i = new Intent(this, <name_of_your_package>.classname.class);
Se non si inserisce "name_of_your_package", il compilatore penserà di fare riferimento alla classe nel pacchetto Android (Android.*).
So che questo è un filo molto vecchio, ma ho appena avuto lo stesso problema. Nel mio caso tutto ciò che dovevo fare era eliminare un spurio
import java.util.prefs.Preferences;
Controlla il tuo manifest per errori che il tuo IDE non ha puntato.