Ответ 1
Возможно, вам нужно проверить, что вы добавили новую активность в файл manifest.xml.
Пример:
<activity
android:name=".className"
android:label="@string/app_name" >
</activity>
Я получаю это исключение, пока я пытаюсь вызвать действие из другого. Полное исключение составляет
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">
Я что-то пропустил?
Возможно, вам нужно проверить, что вы добавили новую активность в файл manifest.xml.
Пример:
<activity
android:name=".className"
android:label="@string/app_name" >
</activity>
Если другие люди сталкиваются с чем-то похожим и приходят на этот пост, проблема, которую я могу, может сэкономить вам некоторое время. Не может быть связан с проблемой 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:", указывающей на вашу актуальную проблему.
Я потратил хороший час, пытаясь понять это. Надеюсь, это может сэкономить некоторое время.
Активность, которую вы вызываете, должна появляться не только в манифесте для собственного пакета, но и в манифесте для пакета CALLING.
Удалите свою активность из манифеста, а затем добавьте ее снова. Этот тип не записывает напрямую XML. Вместо этого перейдите в Application > Application nodes > add
, выберите "Активность" и затем найдите источник файла.
Это сработало для меня.
intent.setClass принимает параметры как "Контекст пакета" и "Класс". примером может быть:
intent.setClass(CurrentActivity.this, TargetActivity.class);
также нужно проверить, зарегистрирована ли активность в файле манифеста.
Добавлено новое действие и определило его в manifest.xml, но я все еще получал ошибку "Невозможно найти явный класс активности". Я использую Eclipse. Решение моей проблемы - это "очистка" проекта. Из главного меню в Eclipse: Project | Clean... Затем вы выбираете свой проект и очищаете его.
Эй, вам нужно использовать другую конструкцию Intent. Это наверняка решит проблему в течение секунды:
Пример:
Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");
startActivity(inte);
Это работает отлично, и я проверил этот код, работая правильно.
У меня было 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) и соответствующим образом изменяя манифест, он работал как обычно.
Я использовал getActivityContext()
(вместо Activity.this
) для кода меню, чтобы сохранить некоторую работу, и копировать и вставлять ее в каждое действие без редактирования каждый раз.
Я заменил их на Activity.this
, и проблема исчезла.
У меня есть чувство, что умный парень Android может работать, не имея необходимости делать это. Хотелось бы услышать, что это будет.
Посмотрите на документацию здесь, что вы хотите:
intent.setClassName("com.x.y", "className");
Перезапустите Eclipse и снова проверьте свой манифест. Если вам не хватает соответствующего действия, добавьте его и повторите попытку. Он решил мою аналогичную проблему.
Попробуйте использовать следующее:
intent.setClassName("com.x.y", "com.x.y.className");
Это работает для меня
В дополнение к Мине. Когда вы объявляете активность как внутренний статический класс, тогда вы должны написать свою деятельность в манифест, как...
<activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />
здесь .app происходит от вашего имени пакета, это может быть .helpers.afdfa $afda
Мое решение этой ошибки состояло в том, чтобы добавить имя пакета перед именем в манифесте.
У меня были следующие действия:
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>
Да, у меня тоже есть эта проблема. Я обновил проект. И тогда все работает нормально.
когда у меня такая же проблема. если вы используете файлы классов библиотеки и записываете их в файлы манифеста android, напишите их так же, как и затем удалите файлы манифеста проектов библиотеки в этой части → то он будет работать абсолютно.
Это исключение также возникает, если вы включаете библиотеку в свое приложение и если библиотека вызывает операцию, определенную в проекте библиотеки. В этом случае нам нужно объединить манифест библиотеки с манифестом приложения-приложения.
С помощью ADT версии 20 мы можем сделать это, добавив инструкцию ниже в project.properties вызывающего приложения.
manifestmerger.enabled = true
Ознакомьтесь с содержимым файла манифеста Android в папке bin проекта. Когда ваше приложение скомпилировано и упаковано, файл манифеста копируется в папку bin. В моем случае манифест в папке bin не согласуется с оригинальным манифестом. Вероятно, это ошибка Eclipse. Я вручную скопировал манифест в папку bin, и он сработал.
вы можете добавить этот код в manifiest.xml
файл
action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"
У меня тоже был тот же случай. Прочитав ответ pearson, я пересмотрел свою деятельность и узнал, что написал
public void onCreate(Bundle s)
Но на самом деле это должно быть
protected void onCreate(Bundle s)
И теперь это работает!
Это работает, если у вас есть объект Activity (который нужно запустить):
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
Действия, которые вы вызываете, не содержат "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);
У меня была такая же проблема. Я пробовал все, кроме ошибки, которую я выяснил позже, было то, что между двойными кавычками и моим именем класса было пространство. Должно быть:
intent.setClassName("com.x.y","com.x.y.className")
не
intent.setClassName("com.x.y"," com.x.y.className")