Search code examples
androidandroid-intentintentfiltercross-application

Using startActivityForResult across Android applications


I have written an application that has an <intent-filter/> so that other applications can start it using startActivityForResult(). When this activity is finished it has created an object that is like:

(Application A)

 public class MyObject implements Serializable {
      private String name;
      private String[] items
 }

And set's it on the result:

(Application A)

 getIntent().putExtra("Extra_MyObject", myObject);
 setResult(RESULT_OK, getIntent());

So the second activity that is recieving this intent has an issue, how does it know the name of the intent extra to receive and how would I create the object received and cast it back into a MyObject that is not part of of this application?

(Application B)

  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == MY_REQ_CODE){
        if(resultCode == RESULT_OK){
                 // So here how do I know what the intent data name is i.e. "Extra_MyObject"
                 // and how would I know the structure to cast the object back to a MyObject that isn't part of this project?

        }
    }
}

Would I just mimic the MyObject class in the second application and cast it to that? or are there other options?


Solution

  • You could use a library like Jackson to serialize your object to a JSON string which you then you deserialize on the other end.

    It's much more flexible and will eliminate the problem of inconsistent versions of your data being passed around if you decide to add for instance an extra field.

    Also, the two apps no longer need to maintain a class in the same namespace or even call them by the same name.

    And as a final note, you no longer need to publish a jar, only your documentation will suffice.