Home » Android » android – How to get the intent extras if the activity is `singleTask`?

android – How to get the intent extras if the activity is `singleTask`?

Posted by: admin April 23, 2020 Leave a comment

Questions:

I have an activity, which is a singleTask:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        System.out.printf("

Answer:

MyAcitvity.onCreate: " + getIntent().getExtras()); } @Override protected void onResume() { super.onResume(); System.out.println("

Answer:

MyActivity.onResume: " + getIntent().getExtras()); } public void toNext(View v) { startActivity(new Intent(this, AaaActivity.class)); } }

and:

<activity android:name=".MyActivity" android:launchMode="singleTask" />

No it has been started, and it started another activity called AaaActivity.

public class AaaActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aaa);
    }

    public void jumpToFirst(View v) {
        Intent intent = new Intent(this, MyActivity.class);
        intent.putExtra("aaa","bbb");
        startActivity(intent);
    }

}

In the later one, there is a button which will trigger the jumpToFirst method to start the first one, and pass a data pair aaa=bbb. Since MyActivity is singleTask, it won’t create a new one, instead, it will just back to the existing MyActivity instance.

My question is: how to get the passing extra data from AaaActivity in MyActivity?

You can see I have logged onCreate and onResume methods, but it prints null extra data.

11-16 08:44:17.833: INFO/System.out(5171): 

Answer:

MyAcitvity.onCreate: null 11-16 08:44:19.417: INFO/System.out(5171):

Answer:

MyActivity.onResume: null 11-16 08:44:26.041: INFO/System.out(5171):

Answer:

MyActivity.onResume: null 11-16 08:44:28.897: INFO/System.out(5171):

Answer:

MyActivity.onResume: null
How to&Answers:

Try setting the launchMode type of your MyActivity as singleTop and then override the following method to look for the new intent:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    //now getIntent() should always return the last received intent
}

Answer:

If you must have single Task then use these flags for your intent:

 resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);

if you use PendingIntent so also: PendingIntent.FLAG_CANCEL_CURRENT :

pIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT ); 

(also use onNewIntent in your activity to handle the extras.)