Ошибка Android "невозможно найти явный класс активности" - PullRequest
24 голосов
/ 13 ноября 2011

У меня есть проект 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);

Ответы [ 8 ]

25 голосов
/ 15 ноября 2011

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

Вы можете вызывать действие следующим образом.

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

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

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

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

12 голосов
/ 15 ноября 2015

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

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

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

</application>
12 голосов
/ 24 октября 2014

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

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

и в звонилке

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

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

2 голосов
/ 19 июля 2013

Сделайте так:

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
startActivity(i);
2 голосов
/ 15 ноября 2011

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

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

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

и попробуйте удалитьначальная точка от:

<activity android:name=".SetLocation.setLocationActivity"></activity>
0 голосов
/ 09 апреля 2019

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

0 голосов
/ 21 сентября 2018

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

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

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

0 голосов
/ 09 сентября 2017

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

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