Where to define constants (Bundle Keys) used between 2 Activities?
One thing that I find is that it is not necessary to wrap your keys inside their own inner class. Putting them inside SecondActivity directly is enough.

public class SecondActivity extends Activity {
    public static class Key {
        public static final String USER_NAME = "USER_NAME";
        public static final String USER_PHOTO = "USER_PHOTO";
    }
    ...


Becomes:

public static final String USER_NAME = "USER_NAME";
public static final String USER_PHOTO = "USER_PHOTO";





  Every time when I want add new fields or change existing fields, I should also change the arguments list in the method start(). And this way is also not suitable in the case when number of the input parameters will increase significantly.


You are correct about that.

Even though I have to say that I do like your idea of a prepareIntent method.

I do feel that it is more common to do your first version: (but without using the Key inner class).

private void onOkButtonPressed() {
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra(SecondActivity.USER_NAME, userName);
    intent.putExtra(SecondActivity.USER_PHOTO, userPhoto);
    startActivity(intent);
}


One thing I really have to point out is that this method is a bit overkill:

public static void start(Context context, String userName, Uri userPhoto) {
    Intent intent = prepareIntent(context, userName, userPhoto);
    context.startActivity(intent);
}


I would prefer to have the parent activity call prepareIntent, which gives you the possibility of changing or adding some of the extras passed to the intent. I also find it better because you can in a parent activity call startActivity directly without the need for context.startActivity

startActivity(SecondActivity.prepareIntent(userName, userPhoto));




To summarize: (My opinions at least)


Drop the start static method entirely
Drop the Key inner class and put the constants directly into SecondActivity
It seems to be more common to create the intent inside the parent activity


In the end, which way you choose is up to you.