ActivityNotFoundException (YES, this activity is declared in AndroidManifest.xml)
I found a few threads reporting a similar problem but none of them really offers something that I haven't tried already.
An innocent such call:
mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));
with the following in AndroidManifest.xml:
<application>
<activity android:name="MyActivityLib" />
<activity android:name="com.example.baseapp.MyEditPre开发者_JS百科ferences" android:label="@string/app_name">
</activity>
</application>
Triggers the following exception:
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?
The things is, this code used to work flawlessly before I changed it from a monolithic application project to a 2-part project that is comprised from a Library Project and an Application Project.
The AndroidManifest.xml is the one in the library project.
What do I need to do eliminate this ActivityNotFoundException
?
I just solved the problem.
All I had to do was add the FQN to the Application project's AndroidManifest.xml
:
<activity android:name="com.example.baseapp.MyEditPreferences"
android:label="com.example.baseapp.MyActivityLib:string/app_name">
</activity>
In fact, I removed any reference to MyEditPreferences
in the Library project's AndroidManifest.xml
completely and it still works.
It also works with the original startActivity 1-line statement:
mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));
Conclusion: It's the application's AndroidManifest.xml
that matters, not the library's.
Maybe this will work?
Intent mIntent = new Intent();
mIntent.setClassName(mActivity, "com.example.baseapp.MyEditPreferences");
mActivity.startActivity(mIntent);
If you use classes which names are included in an android package (Settings, Preferences, Activity, ...), you will need to put this:
Intent i = new Intent(this, <name_of_your_package>.classname.class);
If you don't put "name_of_your_package", the compiler will think that you are refering to the class in android package (android.*).
I know this is a very old thread, but I've just had the same problem. In my case all I had to do was to delete a spurious
import java.util.prefs.Preferences;
Just check your manifest for errors that your IDE not pointed.
精彩评论