UprightCitizen
UprightCitizen

Reputation: 13

Determine how Activity was started

I have an app that starts an activity that isn't the MainActivity first, but it is possible within the course of the app to start the activity on its own. I would like code that runs when the activity is closed to be able to determine if it should go the front of the application(first run) or if it should go back to the previous Activity on the stack(all other runs). Is it possible to determine how an Activity was started inside of it?

Upvotes: 1

Views: 151

Answers (3)

David Wasser
David Wasser

Reputation: 95578

You said:

I would like to determine within the course of the Child Activity what Parent Activity started the Child. In my case that will either be the Launcher or the MainActivity.

Unfortunately, there is no way to find out what Activity launched your Activity. This information is not available. However...

You can tell if the launcher started your Activity by checking the Intent for ACTION = MAIN and CATEGORY = LAUNCHER:

Intent intent = getIntent();
if (Intent.ACTION_MAIN.equals(intent.getAction()) && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) {
    // started by launcher
}

You can also check if the Activity was launched from the list of recent tasks by checking for Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY like this:

Intent intent = getIntent();
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // Launched from recent task list
}

If this isn't enough for you, then you can always add an "extra" yourself when launching the child Activity from the parent, so that it can tell what Activity started it. For example:

Intent intent = new Intent(this, ChildActivity.class);
intent.putExtra("startedFromMainActivity", true);
startActivity(intent);

and then in your child Activity you can check like this:

Intent intent = getIntent();
if (intent.hasExtra("startedFromMainActivity") {
    // started from MainActivity
}

Upvotes: 1

fsm
fsm

Reputation: 21

your manifesto file exchange mainactivity DEFAULT...

      <activity
        android:name="com.example.iiintent.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.iiintent.al">
    <intent-filter>


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

Upvotes: 0

Adnane.T
Adnane.T

Reputation: 272

You can store a value in the intent launching your activity, and once opened read it to adapt your behaviour:

intent.putExtra(key,value);

And on the activity side (in onCreate for eg):

getIntent().getExtra(key,defaultValue);

Default value is what you get if no value is found. getExtra depends o the type of the data stored, so there is getIntExtra ,booleanExtra ,stringExtra ...
Learn more here

Upvotes: 0

Related Questions