android.content.ActivityNotFoundException: - PullRequest
       3

android.content.ActivityNotFoundException:

21 голосов
/ 08 августа 2010

Я получаю это исключение, когда пытаюсь вызвать действие из другого. Полное исключение -

android.content.ActivityNotFoundException: не удалось найти явный класс активности {com.x.y / com.x.y.class};

Я делаю intent.setClass("com.x.y","com.x.y.className"), где className - это название моего класса активности, а com.x.y - это пакет, в котором он находится.

Мой AndroidManifest.xml имеет следующее содержимое:

<activity android:name="com.x.y.className" android:label="@string/app_name">

Я что-то упустил?

Ответы [ 23 ]

31 голосов
/ 08 августа 2010

Может быть, вам нужно убедиться, что вы добавили новое действие в файл manifest.xml

Пример:

<activity
      android:name=".className" 
      android:label="@string/app_name" > 
</activity>
16 голосов
/ 09 июня 2011

Если другие люди сталкиваются с чем-то похожим и приходят на этот пост, проблема, с которой я столкнулся, может сэкономить вам некоторое время. Может быть не связано с проблемой OP, но def связано с исключением ActivityNotFound.

Я пытался загрузить упражнение, используя:

Intent intent = new Intent( this, class );

Однако я постоянно получал ActivityNotFoundException, хотя проверял и перепроверял код несколько раз.

Это исключение, которое я получал, на самом деле не было вызвано намерением, но некоторый код, который я выполнял внутри загруженного действия, выдавал RuntimeException. (моя проблема была вызвана Typeface.createFromAsset())

Возможно, вы сталкиваетесь с аналогичным RuntimeException в своей активности.

Чтобы проверить, так ли это, поместите свой код намерения в блоки try catch. Вот так:

try {
    /* your code */
    ...
} catch ( ActivityNotFoundException e) {
    e.printStackTrace();
}

Запустите приложение еще раз и проверьте свой LogCat. Если это та же проблема, вы получите RuntimeException с записью «Caused By:», указывающей на вашу реальную проблему.

Я провел хороший час, пытаясь понять это. Надеюсь, это может сэкономить кому-то время.

14 голосов
/ 27 мая 2011

Активность, которую вы вызываете, должна появляться не только в Манифесте для его собственного пакета, но и в Манифесте для пакета CALLING.

8 голосов
/ 01 сентября 2012

Удалите свою активность из манифеста, а затем добавьте ее снова. Этот тип не записывает тип XML напрямую. Вместо этого перейдите к Application > Application nodes > add, выберите действие и найдите источник файла.

Это сработало для меня.

3 голосов
/ 08 августа 2010

intent.setClass принимает параметры как «Контекст пакета» и «Класс».Например:

intent.setClass(CurrentActivity.this, TargetActivity.class);

также необходимо проверить, зарегистрировано ли действие в файле манифеста.

2 голосов
/ 15 ноября 2011

Добавил новое действие и определил его в manifest.xml, но я все еще получал ошибку «Невозможно найти явный класс действия».Я использую Eclipse.Решением моей проблемы стала «чистка» проекта.Из главного меню в Eclipse: Project | Clean .... Затем вы выбираете свой проект и очищаете его.

1 голос
/ 05 декабря 2011

Эй, вам нужно использовать другую форму конструктора Intent.Это наверняка решит вашу проблему в течение секунды:

Пример:

Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");

startActivity(inte);

Это отлично работает, и я проверил этот код, он работает правильно.

1 голос
/ 12 января 2012

У меня было ActivityNotFoundException, когда я реализовал Activity внутри другого класса (как внутренний класс):

//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}
//...

Объявлен как следующий в манифесте:

<activity android:name=".Pref.Activity"
...

После объявленияэто как обычный класс (публичный класс PrefActicity) и, соответственно, изменяя манифест, он работал как обычно.

1 голос
/ 12 сентября 2012

Я использовал getActivityContext() (вместо Activity.this) для кода меню, чтобы сохранить некоторую работу, и копировать и вставлять его в каждое действие, не редактируя каждый раз.

Я заменил их на Activity.this, и проблема исчезла.

У меня такое чувство, что умный Android-парень может обойтись без необходимости делать это. Хотелось бы услышать, что бы это было.

0 голосов
/ 26 апреля 2013

когда у меня такая же проблема. если вы используете файлы классов библиотеки и записываете их в файлы манифеста Android, напишите это как, а затем удалите файлы манифеста проектов библиотеки в этой части >> тогда это будет работать абсолютно ..

...