ActivityNotFoundException (YES, это действие объявлено в AndroidManifest.xml)

Я нашел несколько потоков, сообщающих о подобной проблеме, но ни один из них не предлагает то, что я еще не пробовал.

Невинный такой вызов:

mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));

в AndroidManifest.xml:

 <application>
    <activity android:name="MyActivityLib" />
    <activity android:name="com.example.baseapp.MyEditPreferences" android:label="@string/app_name">
    </activity>
 </application>

Запускает следующее исключение:

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?

Дело в том, что этот код работал безупречно, прежде чем я изменил его из проекта монолитного приложения на проект из двух частей, который состоит из проекта библиотеки и проекта приложения.

AndroidManifest.xml - это проект library.

Что мне нужно для устранения этого ActivityNotFoundException?

Ответ 1

Я просто решил проблему.

Все, что мне нужно было сделать, это добавить FQN в проект Application AndroidManifest.xml:

<activity android:name="com.example.baseapp.MyEditPreferences"
          android:label="com.example.baseapp.MyActivityLib:string/app_name">
</activity>

Фактически, я полностью удалил любую ссылку на MyEditPreferences в проекте Библиотека AndroidManifest.xml и все еще работает.

Он также работает с исходным 1-строчным оператором startActivity:

mActivity.startActivity(new Intent(mActivity, MyEditPreferences.class));

Заключение: Это приложение AndroidManifest.xml имеет значение, а не библиотека.

Ответ 2

Может, это сработает?

Intent mIntent = new Intent();
mIntent.setClassName(mActivity, "com.example.baseapp.MyEditPreferences");
mActivity.startActivity(mIntent);

Ответ 3

Если вы используете классы, имена которых включены в пакет android (Настройки, Предпочтения, Активность,...), вам необходимо указать следующее:

Intent i = new Intent(this, <name_of_your_package>.classname.class);

Если вы не поместите "name_of_your_package", компилятор подумает, что вы ссылаетесь на класс в пакете android (android. *).

Ответ 4

Я знаю, что это очень старый поток, но у меня была такая же проблема. В моем случае все, что мне нужно было сделать, это удалить ложный

import java.util.prefs.Preferences;

Ответ 5

Просто проверьте свой манифест на наличие ошибок, которые ваша IDE не указала.