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

Ошибка Android "не удалось найти явный класс активности"

У меня есть проект Android с несколькими пакетами. Структура пакетов в этом случае - com.WAPP.SetLocation - это пакет, содержащий активность, которую я хочу запустить.

В моем манифесте com.WAPP считается базовым пакетом:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.WAPP"
      android:versionCode="1"
      android:versionName="1.0">

Мои действия объявлены в моем манифесте как:

<activity android:name=".mainScreenActivity"></activity>
<activity android:name=".SetLocation.setLocationActivity"></activity>

Активность mainScreen отображается отлично, поскольку она находится внутри пакета com.WAPP. Но когда я пытаюсь запустить setLocationActivity, я получаю неспособность найти явную ошибку класса. Вот как у меня есть параметры намерения:

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.setLocationActivity");
            startActivity(i);
4b9b3361

Ответ 1

Первым параметром является пакет приложений, а не пакет, в котором находится действие.

Вы можете вызвать действие вроде этого.

Intent i = new Intent();
i.setClassName("com.WAPP",
               "com.WAPP.SetLocation.setLocationActivity");
startActivity(i);

Предпочтительно, чтобы SYLARRR предлагал Android автоматически определить это для вас. Следовательно, вызов как..

startActivity(new Intent(this, setLocationActivity.class));

Рекомендуется, чтобы в стандартах java было указано, что имя пакета все в нижнем регистре, а имя класса - CamelCased.

Ответ 2

Если новая активность не в том же пакете с MainActivity (вы звоните отсюда?), попробуйте объявить в манифесте

<activity android:name="com.WAPP.SetLocation.setLocationActivity"></activity>

и в вызывающем абоненте

Intent intent = new Intent(this, setLocationActivity.class);
startActivity(intent);

Надеюсь, это поможет!

Ответ 3

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

<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true">

    <activity android:name=".mainScreenActivity"></activity>
    <activity android:name=".SetLocation.setLocationActivity"></activity>

</application>

Ответ 4

Если я не ошибаюсь, i.setClassName("com.WAPP.SetLocation","com.WAPP.SetLocation.setLocationActivity"); должен быть i.setClassName(getBaseContext(),"setLocationActivity"); Reference

Также попробуйте этот синтаксис:

startActivity(new Intent(MyActivity.this, setLocationActivity.class));

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

<activity android:name=".SetLocation.setLocationActivity"></activity>

Ответ 5

Сделайте это следующим образом:

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
startActivity(i);

Ответ 6

в вашем манифесте вы объявили его как .SetLoction.setLocationActivity но имя пакета com.WAPP.SetLocation поэтому вам нужно снова прикрепить его.

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.SetLocation.setLocationActivity");
            startActivity(i);

Ответ 7

В Xamarin Android убедитесь, что ваш класс Activity имеет атрибут Activity

[Activity(Theme = "@style/MyTheme")]
public class MyActivity : ActivityBase
{
...
}

При этом вы убедитесь, что ваша активность зарегистрирована в AndroidManifest.xml

Ответ 8

У меня была такая же проблема в проекте. Это потратило на меня почти целый день. Я перепробовал все решения, которые упомянуты выше, но ни одно из них не помогло мне. После всей тяжелой работы я просто "перестроил" проект и "очистил" проект, и он работал отлично. Примечание: перед тем, как пройти весь процесс, вам просто нужно попробовать эти опции.

Ответ 9

Если вы не можете отправить неявное вещание или неявное намерение - сначала проверьте ComponentName. имя пакета должно быть идентификатором приложения, а не именем пакета, которое вы можете видеть в своем классе получателя.

Найдите идентификатор приложения в build.gradle:

             defaultConfig {
                            applicationId "com.my.app.id.name"

или в автоматически сгенерированном файле buildConfig.java после сборки:

приложение\сборка\\ генерируется источник\buildConfig\выпуска\

             package com.my.app.id.name;

Например, если ваше имя класса "MyExplicitReciver" и имя пакета, которое вы видите в первой строке этого класса,

            package com.my.app.myPackage.name.receivers;

поэтому имя класса должно быть: com.my.app.myPackage.name.receivers.MyExplicitReciver

и вы должны установить имя компонента как это в setComponent:

            intent.setComponent(new ComponentName("com.my.app.id.name",
    "com.my.app.myPackage.name.receivers.MyExplicitReciver"));
            context().sendBroadcast(intent);