41

I have an android project with several packages. The structure of the packages in this case is com.WAPP.SetLocation is the package that contains the activity I want to run.

In my manifest, com.WAPP is considered the base package:

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

My activities are declared in my manifest as:

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

The mainScreen activity displays fine, since it is inside the com.WAPP package. But when I try to run the setLocationActivity, I get the unable to find explicit class error. Here is how I have the intent parameters:

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.setLocationActivity");
            startActivity(i);
Dave Newton
  • 158,873
  • 26
  • 254
  • 302
Johnny Rocket
  • 1,394
  • 3
  • 17
  • 25

12 Answers12

31

The first parameter is application package not the package where the activity is.

You can invoke the Activity like this.

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

It is preferred as SYLARRR suggested to have Android automatically figure that out for you. Hence the call as..

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

It's recommended per java standards to have the package name all lower-cased and the class name as CamelCased.

Jeremy Edwards
  • 14,620
  • 17
  • 74
  • 99
20

If the new activity not in the same packet with MainActivity(you call from here?), try declare on manifest

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

and in the caller

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

Hope this helps!

Huy Hóm Hỉnh
  • 597
  • 7
  • 18
15

In additional to the above answers make sure that your activities are declared inside application in manifest

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

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

</application>
polis
  • 737
  • 7
  • 6
  • That was the problem I had. Was doing a hackathon and copied a lot of files so Android Studio never had a chance to pick up on the new activity. – Kurt Price Nov 17 '18 at 19:33
4

If i'm not mistaken, the i.setClassName("com.WAPP.SetLocation","com.WAPP.SetLocation.setLocationActivity"); should be i.setClassName(getBaseContext(),"setLocationActivity"); Reference

Also try this syntax:

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

and try removing the starting dot from:

<activity android:name=".SetLocation.setLocationActivity"></activity>
Indrek Kõue
  • 6,449
  • 8
  • 37
  • 69
3

Do it by this way:

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
startActivity(i);
Daniel De León
  • 13,196
  • 5
  • 87
  • 72
2

you should class ad to manifest.xml for example of manifest.xml in this example, i added SecondActivity.class

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SecondActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
dılo sürücü
  • 3,821
  • 1
  • 26
  • 28
1

In Xamarin Android, make sure that your Activity class has an Activity attribute

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

With that you are making sure that your activity is registered in AndroidManifest.xml

Amadeus Sanchez
  • 2,375
  • 2
  • 25
  • 31
1

I had the same kind of issue in the project . It wasted me almost a full day . i tried all the solutions that are mentioned above , but none of the solutions worked for me . After all the hard work i just "Rebuild" the project and "clean" The project and it worked perfectly . Note: Before going through all the process u just needed to have a try to these options.

1

First of all, make sure that you have created activity and not the class. And, if it is activity then go to the manifest.xml file and look at the path of that particular file.

This worked for me absolutely well!!

https://forums.xamarin.com/discussion/104102/android-content-activitynotfoundexception-unable-to-find-explicit-activity-class

this is for reference

shivambhanvadia
  • 487
  • 4
  • 7
0

in your manifest you declared it as .SetLoction.setLocationActivity but the package name is com.WAPP.SetLocation so you need to prefix that again.

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

This might be due to not registering your next activity XML file in the manifest. Register your next activity XML file in the AndroidManifest.xml file

<activity android:name=".NextActivity" />

Hope it helps.

0

Thia might be problem if ImageView is used :(

Intent intent = new Intent(context,ImageView.class);
                        intent.putExtra("imageurl",clients_document_return.getUrl());
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                        v.getContext().startActivity(intent);

and your class name might me Imageview.class so first check all small capital in class name

Thanks :)

Vaibhav Pallod
  • 466
  • 7
  • 21