Ошибка 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);
Ответы
Ответ 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);