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

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>
4b9b3361

Ответ 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.