Подтвердить что ты не робот

Android.content.ActivityNotFoundException:

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

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">

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

4b9b3361

Ответ 1

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

Пример:

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

Ответ 2

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

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

Intent intent = new Intent( this, class );

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

intent.setClass принимает параметры как "Контекст пакета" и "Класс". примером может быть:

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

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

Ответ 6

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

Ответ 7

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

Пример:

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

startActivity(inte);

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

Ответ 8

У меня было 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"
...

Объявив это как обычный класс (public class PrefActicity) и соответствующим образом изменяя манифест, он работал как обычно.

Ответ 9

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

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

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

Ответ 10

Посмотрите на документацию здесь, что вы хотите:

intent.setClassName("com.x.y", "className");

Ответ 11

Перезапустите Eclipse и снова проверьте свой манифест. Если вам не хватает соответствующего действия, добавьте его и повторите попытку. Он решил мою аналогичную проблему.

Ответ 12

Попробуйте использовать следующее:

intent.setClassName("com.x.y", "com.x.y.className");

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

Ответ 13

В дополнение к Мине. Когда вы объявляете активность как внутренний статический класс, тогда вы должны написать свою деятельность в манифест, как...

         <activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />

здесь .app происходит от вашего имени пакета, это может быть .helpers.afdfa $afda

Ответ 14

Мое решение этой ошибки состояло в том, чтобы добавить имя пакета перед именем в манифесте.

У меня были следующие действия:

  • id.scanner.main.A1

  • id.scanner.main.gallery.A2

Мой манифест содержал следующее:

<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>

Это решило проблему:

<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>

Ответ 15

Да, у меня тоже есть эта проблема. Я обновил проект. И тогда все работает нормально.

Ответ 16

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

Ответ 17

Это исключение также возникает, если вы включаете библиотеку в свое приложение и если библиотека вызывает операцию, определенную в проекте библиотеки. В этом случае нам нужно объединить манифест библиотеки с манифестом приложения-приложения.

С помощью ADT версии 20 мы можем сделать это, добавив инструкцию ниже в project.properties вызывающего приложения.

manifestmerger.enabled = true

Ответ 18

Ознакомьтесь с содержимым файла манифеста Android в папке bin проекта. Когда ваше приложение скомпилировано и упаковано, файл манифеста копируется в папку bin. В моем случае манифест в папке bin не согласуется с оригинальным манифестом. Вероятно, это ошибка Eclipse. Я вручную скопировал манифест в папку bin, и он сработал.

Ответ 19

вы можете добавить этот код в manifiest.xml файл

action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"

Ответ 20

У меня тоже был тот же случай. Прочитав ответ pearson, я пересмотрел свою деятельность и узнал, что написал

public void onCreate(Bundle s)

Но на самом деле это должно быть

protected void onCreate(Bundle s)

И теперь это работает!

Ответ 21

Это работает, если у вас есть объект Activity (который нужно запустить):

intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());

Ответ 22

Действия, которые вы вызываете, не содержат "sheme" и содержат фильтр намерений:

<activity android:name=".SecondActivity">
        <intent-filter>
               <action android:name="com.example.sj.myapplication.SecondActivity"/>
               <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>

поэтому при вызове кода:

Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);

Ответ 23

У меня была такая же проблема. Я пробовал все, кроме ошибки, которую я выяснил позже, было то, что между двойными кавычками и моим именем класса было пространство. Должно быть: intent.setClassName("com.x.y","com.x.y.className")

не

intent.setClassName("com.x.y","  com.x.y.className")