startActivity(new Intent(this, Class.forName(getPackageManager().getApplicationInfo(getPackageName(), 128).metaData.getString("com.sadaf.javafiles.MAIN_ACTIVITY_CLASS_NAME"))));
This code is to create and add another activity to the top UI level
startActivity()
Can be called from any context/activity, mostly used like
finish()
startActivity(new Intent(this, NewActivity.class));
This is used to close the current activity and begin the next
For a more detailed explanation please refer to :
https://developer.android.com/training/basics/firstapp/starting-activity#BuildIntent
startActivity(new Intent(this, Class.forName(getPackageManager().getApplicationInfo(getPackageName(), 128).metaData.getString("com.sadaf.javafiles.MAIN_ACTIVITY_CLASS_NAME"))));
The intent requires a context and a class as parameter, the context is “this” (the current context from the activity that is currently being displayed)
The class is from Class.forName(String) which requires a String value to get the class name from an activity
It gets that String value from calling :
getPackageManager().getApplicationInfo(getPackageName(), 128).metaData.getString(stringKey)
stringKey is the from the projects AndroidManifest.xml file android:name:
<activity android:name="com.sadaf.javafiles.MAIN_ACTIVITY_CLASS_NAME" >
</activity>
So essentially what that piece of code is doing is getting the .class of your declared “main activity” programatically instead of using the “standard” way of just going MainActivity.class
I followed the Xamarin tutorial to open another activity but I receive an error message saying: the type or namespace name"Intent" could not be found(are you missing a using directive or an assembly reference?)
enter image description here
May I know if there is anything missing or wrong in my code? Thank you
Make sure you have referenced using Android.Content; on top of your activity
You Need code something like this ...
home.setOnClickListener(new View.OnClickListener() { //here home is a button
#Override
public void onClick(View v) {
Intent intent=new Intent(LoginOption.this,HomeActivity.class);
startActivity(intent);
}
});
You Must need two activity first where your butoon exist, to open another activity Intent intent=new Intent(LoginOption.this,HomeActivity.class); here first activity is loginoption activity where my button is exist and another home activity which will be open after clicking event.
The app crashes in Android Studio when a button is clicked to reach the another activity through intent
public void next(View view) {
Toast.makeText(getApplicationContext()," Next called " , Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(),SecondActivity.class));
}
The error I am getting from logcat is
Caused by: android.content.ActivityNotFoundException: Unable to find
explicit activity class
{com.example.utkarsh.internalstorage/com.example.utkarsh.internalstorage.SecondActivity};
have you declared this activity in your AndroidManifest.xml?
specify activity in your android manifest file
<activity android:name="SecondActivity"> </activity>
The issue is, the SecondActivity Activity wasn't added to the AndroidManifest.xml. Once you add that as an application node, it will work properly.
<activity android:name="com.example.utkarsh.internalstorage.SecondActivity" />
Error message is clear, define your activity in your manifest
I have an Android library project that I would like to use from within another Android project.
The library has a Activity declared in its AndroidManifest. When I try the following within the second project:
Intent intent = new Intent(this, ReaderActivity.class);
startActivity(intent);
I get the following exception:
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.digitalpages.reader.demo/br.com.digitalpages.reader.demo.ReaderDemoActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
...
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
...
How can I open the Activity from the another project?
EDIT:
By users answers I added the following line into my second project
<uses-library android:name="br.com.digitalpages.reader" android:required="true" />
But it's still doesn't works
I believe you must include the <activity> in your own AndroidManifest.xml -- I don't think it gets picked up from a library. I don't have my reference for that handy.
Update: It's official solution. From the doc:
Declaring library components in the manifest file
In the manifest file of the application project, you must add
declarations of all components that the application will use that are
imported from a library project. For example, you must declare any
<activity>, <service>, <receiver>, <provider>, and so on, as well as
<permission>, <uses-library>, and similar elements.
Declarations should reference the library components by their
fully-qualified package names, where appropriate.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setComponent(new ComponentName("packagename//ex-com.hello",
"classname//ex-com.hello.ExampleActivity"));
startActivity(intent);
And make sure in library you have declared the activities. You don't need to declare the library activities in your current project's manifest.
did you add to the manifest?
http://developer.android.com/guide/topics/manifest/uses-library-element.html
This works:
In your library, put your custom Activity:
public class MyLibraryActivity extends ListActivity { ... }
No need to put it into a manifest.
In your calling Android project, create an empty (dummy) wrapper:
public class MyActivity extends MyLibraryActivity { }
and add reference to this class to your manifest:
<activity android:name="my_package.MyActivity" ... />
I am aware that the question is quite old but I think this might help people like me that came up with the same problem.
Using Eclipse, the best way to share code and activities among libraries is probably the one that can be found in the android documentation here:
Managing Projects from Eclipse with ADT
When using an activity inside the library, the activity should be declared only inside the manifest of library.
The activity can be started from the main app like this:
Intent intent = new Intent();
intent.setClassName(this, "com.duna.remotelocklibrary.activities.MainRemoteActivity");
startActivity(intent);
I tried to start the library's activity like the following code, but i warn you: it doesn't work
Intent intent = new Intent();
intent.setClassName("com.duna.remotelocklibrary", "com.duna.remotelocklibrary.activities.MainRemoteActivity");
startActivity(intent);
you should import just the code of the activity ( not the manifest too ) , and then , declare your Activity ( of the library ) , in the manifest of your second project
You don't need to explicitly add activity in your main project's manifest if you have already added the activity in your library's manifest by using the following code when starting library's activity.
For Kotlin
val myIntent = Intent(activityContext, ActivityToLaunch::class.java)
// Needed to set component to remove explicit activity entry in application's manifest
myIntent.component = ComponentName(activityContext, PickerActivity::class.java)
activityContext.startActivity(myIntent, PICKER_REQUEST_CODE)
For Java
Intent myIntent = new Intent(activityContext, PickerActivity.class);
// Needed to set component to remove explicit activity entry in application's manifest
final ComponentName component = new ComponentName(activityContext, PickerActivity.class);
myIntent.setComponent(component);
activityContext.startActivity(myIntent, REQUEST_CODE);
I just want to code for splashscreen. for that I used intent but I am getting error that instrumention source not found. I have two files splashscreen.java and myapps.java where I have use threading concept and called anothe activity as
finally
{
finish();
startActivity(new Intent("com.example.MyApps"));
stop();
}
# startAcitivy I am getting axception please guide me do I have to modify androidmanifest file? if yes please provide me syntax for that.
If you're starting a new Activity with intent, I prefer using it like:
Intent intent = new Intent(MyClass.this, MyApps.class);
startActivity(intent);
and have proper entry on your manifest for your MyApps class like:
<application>
.......
.....
<activity android:name="com.example.MyApps" />
........
</application>
Add
<activity android:name="com.example.MyApps"></activity>
in your manifest.