ActivityNotFoundException?
Я получаю ActivityNotFoundException
в следующем коде:
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
Ответы
Ответ 1
У меня тоже была эта проблема, как это было прекрасно описано jpahn.
период на фронте не помог мне.
даже с этим (копия исходного вопроса, включая изменения), я все равно получаю ActivityNotFoundException.
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
Это было разрешено после многих проб и ошибок, просто добавив это в фильтр намерений в манифесте:
<category android:name="android.intent.category.DEFAULT" />
Итак, в последнем файле манифеста содержится:
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Ответ 2
Обязательно объявите свою активность в файле manifest.xml в приложении:
<application>
<activity android:name=".YourNewActivity"/>
</application>
Чтобы начать новую активность:
Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);
Где main обозначает текущую активность,
Ответ 3
Я получил эту ошибку после перемещения класса активности из одного пакета в другой.
Чистая сборка решила его (Project → Clean).
Ответ 4
Добавить. (точка) перед именем вашей деятельности в манифесте Android. Так что это должен быть андроид: name= ". WordsToSpeakMainActivity"
Ответ 5
Существует два типа намерений в структуре android,
1-Неявные намерения, которые вы используете,
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
просто добавьте одну строку в фильтр намерения
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
2- Явные намерения
Intent i=new Intent(CurrentActivity.this,WhereWeWantToGoActivity.class);
startActivity(i);
Ответ 6
Чтобы быть в безопасности, вы также можете назвать свою новую деятельность следующим образом:
Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); //
Однако вы должны добавить активность в androidmanifest - и написать a. перед ним, например,
<activity android:name=".YOURACTIVITYNAME"></activity>
Ответ 7
Чтобы запустить операцию с помощью определения строки, используйте:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);
Ответ 8
У меня есть дополнение к ответу @Tom Pace. Ответ совершенно прав, но чтобы сделать его более понятным:
ActivityNotFoundException
происходит из-за отсутствия
<category android:name="android.intent.category.DEFAULT" />
Потому что, когда ОС Android видит это в файле манифеста, понимает, что это действие может получить намерение.
Вывод точки ActivityNotFoundException
заключается в том, что когда активность (намерение-создатель-активность) пытается создать намерение для другой активности (намерение-приемник-активность), ОС Android видит намерение для активности приемника, но активность приемника не получить кого угодно. Тогда ОС Android возвращает пустое или пустое намерение к активности-creator-activity. И startActivity
выдает это исключение.
Я нашел код разработчиков Android для исключения этого исключения:
// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
Разработчики Android: фильтры намерений
Ответ 9
В самой верхней части вашего AndroidManifest.xml вы увидите атрибут package
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.example"
а затем в теге активности вы увидите атрибут name:
<activity
android:name=".Something"
Убедитесь, что имя пакета и имя активности, когда они объединены вместе, содержат полную спецификацию пакета вашей деятельности i.e.
com.android.example
+ .Something
= com.android.example.Something
В противном случае вы получите ActivityNotFoundException
.