Home » Android » android – Setting "task affinity" programmatically

android – Setting "task affinity" programmatically

Posted by: admin April 23, 2020 Leave a comment

Questions:

is there a way to set the “task affinity” programmatically? I mean like with some Intent flag or sth? I didn’t find anything about this being possible in the Android docs.

Setting the affinity in a static way in the AndroidManifest.xml with android:taskAffinity does not suit my needs.

How to&Answers:

You cannot.

taskAffinity is contained by ActivityInfo, which is member of Activity.

Source code of Activity

public class Activity extends ContextThemeWrapper
    ...
    ... {
    // set by the thread after the constructor and before 
    // onCreate(Bundle savedInstanceState) is called.

    @UnsupportedAppUsage
    /*package*/ ActivityInfo mActivityInfo;
 }

And ActivityInfo has taskAffinity.

Source code of ActivityInfo

/**
 * Information you can retrieve about a particular application
 * activity or receiver. This corresponds to information collected
 * from the AndroidManifest.xml's <activity> and
 * <receiver> tags.
 */
public class ActivityInfo extends ComponentInfo implements Parcelable {

   /**
    * The affinity this activity has for another task in the system.  The
    * string here is the name of the task, often the package name of the
    * overall package.  If null, the activity has no affinity.  Set from the
    * {@link android.R.attr#taskAffinity} attribute.
    */
    public String taskAffinity;

According to the comment of source code, information of taskAffinity is collected from AndroidManifest.xml. And there is no public method to set mActivityInfo.taskAffinity.

Answer:

Android: Task affinity & Clear task

Check David Wasser’s answer. Most of the time we do not need give FLAG for external intents but of-course you can do. If you want to gain new task ability by affinity then define ‘Intent.FLAG_ACTIVITY_NEW_TASK’

Answer:

Use this method :
finishAffinity();