Passing Data Between Activities Android Activities • If you remember, Android stores Activities on a stack. • You have the ability to add as many Activities onto the stack from you application and needed. • You can also pass data to and from Activities. How to Launch a new Activity from an Activity? • The Activity class provides a method called startActivity() • startActivity() takes an Intent as an argument. • The Intent provides the information with what new Activity we want to create. How to Launch a new Activity from an Activity? Intent i = new Intent(this, ActivityTwo.class); startActivity(i); How to Launch a new Activity from an Activity? Parm 1: The Context Intent i = new Intent(this, ActivityTwo.class); startActivity(i); How to Launch a new Activity from an Activity? Parm 2: The Class name of the new Activity to create. Intent i = new Intent(this, ActivityTwo.class); startActivity(i); Intents • Intents are asynchronous messages which allow Android components to request functionality from other components of the Android system. • In addition to giving information about what Activity we want to launch, Intents can also store data to be passed between Activities. Storing Data in the Intent Intent i = new Intent(this, ActivityTwo.class); i.putExtra("UserName", "John Doe"); i.putExtra("DLNumber", 123456789); startActivity(i); Extracting data stored in Intent from the new Activity • The Activity class has a getIntent() • Use the Intent returned from the getIntent() to extract any data that was passed. Extracting Data from the Intent Intent i = new Intent(this, ActivityTwo.class); i.putExtra("UserName", "John Doe"); i.putExtra("DLNumber", 123456789); startActivity(i); Intent i = getIntent(); String name = i.getStringExtra("UserName"); int dl = i.getIntExtra("DLNumber", 0); How to get a result from an Activity startActivityForResult() • From ActivityOne, you can start ActivityTwo by calling startActivityForResult(). Using this method, you can specify a request code. • When ActivityTwo is about to end, you can call setResult() to pass data back to ActivityOne. • Once ActivityTwo ends, if it called setResult(), then the onActivityResult() method on ActivityOne is executed. ActivityOne can now access the data sent to it from ActivityTwo. You want to take a photo? Activity A Activity B Create an Intent to Launch the Camera App In order to get a picture for a contact. Contacts App When you start the activity, you’ll send a request code that will be returned to you when the launched activity completes. You want to take a photo? Activity A Activity B Contacts App //Code in Activity A Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); When the camera activity completes The contacts app will receive a call in onActivityResult(). Contacts App When the camera activity completes Contacts App //Code in Activity B Intent intent = new Intent(); intent.putExtra();// It will put an image thumbnail into the intent’s data //set results so Activity A gets onActivityResult() called setResult(Activity.RESULT_OK, intent); finish(); Implementing startActivityForResult() • Code in ActivityOne.java REQUEST_CODE is a user defined integer. I usually store the REQUEST_CODE as a public static final member so it can be accessed in both activities. Returning result from SubActivity Code from ActivityTwo.java Implementing startActivityForResult() • Code in ActivityOne.java