ActivityNotFoundException (ДА, это действие объявлено в 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?


person an00b    schedule 14.06.2011    source источник
comment
Что такое com.example.baseapp.paypal?? Вы используете какую-то библиотеку PayPal?   -  person Ravi Vyas    schedule 14.06.2011
comment
@ Рави Вьяс Да, я. Это основная причина, по которой я разбил проект монолитного приложения на проект из двух частей: библиотека, общая для всех рынков Android, и крошечный проект приложения (с классом активности, полученным из класса активности библиотеки), который настраивается для каждого рынка Android или магазина приложений. . Вы что-то заметили?   -  person an00b    schedule 14.06.2011
comment
Я не верю, что вы можете создать намерение вызывать такой класс, который находится в другом пакете.   -  person Maximus    schedule 14.06.2011
comment
кроме вашего потрясающего рейтинга репутации 404, я не могу найти ничего с предоставленной информацией :-(   -  person Ravi Vyas    schedule 14.06.2011
comment
@Максимус Почему? До сих пор мне удавалось решить все проблемы, связанные с разбивкой проекта монолитного приложения на проект, состоящий из двух частей. Иногда это включало уродливые обходные пути, такие как дублирование всех активов но по крайней мере это работает. Если бы вы могли объяснить, почему, я мог бы придумать обходной путь. :)   -  person an00b    schedule 14.06.2011


Ответы (5)


Я только что решил проблему.

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

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

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

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

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

Вывод: важно AndroidManifest.xml приложения, а не библиотеки.

person an00b    schedule 14.06.2011
comment
здесь написано: developer.android.com/tools/projects/projects-eclipse .html - person user1324936; 24.11.2013
comment
В файле манифеста проекта приложения необходимо добавить объявления всех компонентов, которые будут использоваться приложением, импортированных из проекта библиотеки. - person Sandy; 14.10.2014

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

Intent mIntent = new Intent();
mIntent.setClassName(mActivity, "com.example.baseapp.MyEditPreferences");
mActivity.startActivity(mIntent);
person Maximus    schedule 14.06.2011
comment
Спасибо и +1 за предложение. Я только что попробовал, и это не помогло. Я также нашел ветку, описывающую невероятно похожую проблему: 5363603" title="activitynotfound исключение, созданное для предпочтения, указанного в манифесте"> stackoverflow.com/questions/5363548/ Подход FQN работал с ним, но не решил проблему для меня. Любые другие идеи? - person an00b; 14.06.2011

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

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

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

person trumpetero    schedule 14.06.2013

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

import java.util.prefs.Preferences;
person Kevin Gilbert    schedule 14.05.2013

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

person Smaran    schedule 07.03.2016