Использование startActivityForResult в приложениях Android - PullRequest
2 голосов
/ 04 марта 2012

Я написал приложение с <intent-filter/>, чтобы другие приложения могли запускать его, используя startActivityForResult().Когда это действие завершено, оно создало объект, подобный:

(Приложение A)

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

И установил его на результат:

(Приложение A)

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

Итак, второе действие, которое получает это намерение, имеет проблему, как узнать имя дополнительного намерения для получения и , как бы я создал объектполучил и бросил его обратно в MyObject, который не является частью этого приложения?

(Приложение 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?

        }
    }
}

Буду ли я просто имитировать класс MyObjectво втором приложении и приведете это к тому?или есть другие варианты?

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Вы можете использовать библиотеку, такую ​​как Джексон , чтобы сериализовать ваш объект в строку JSON, которую вы затем десериализуете на другом конце.несоответствующие версии ваших данных передаются, если вы решите добавить, например, дополнительное поле.

Кроме того, двум приложениям больше не нужно поддерживать класс в одном пространстве имен или даже вызывать их с одинаковыми именами.

И, наконец, вам больше не нужно публиковать банку, достаточно только вашей документации.

1 голос
/ 04 марта 2012

как узнать имя дополнительного намерения получить

При чтении документации API, опубликованной автором первого приложения.

как создать созданный объект и вернуть его обратно в MyObject, который не является частью этого приложения?

Авторам первого приложения также придется опубликовать JAR, содержащий реализацию MyObject, что авторы второго приложения добавляют в свой проект.И авторам первого приложения никогда бы не пришлось менять MyObject или, по крайней мере, убедиться, что работает версионность сериализации.

Могу ли я просто имитировать класс MyObject во втором приложении и привестиэто к тому?

Если под "мнемосхемой" вы подразумеваете "иметь класс с точно таким же именем класса, точно таким же именем пакета и точно такой же логикой сериализации", то да, хотя язатем беспокоитесь о том, что вы используете термин «просто» ...: -)

Если MyObject имеет структуру, которую вы описываете, рассмотрите возможность использования String и String[] как отдельных дополнений илиих в Bundle и используйте в качестве дополнительного, чтобы не пытаться использовать пользовательские Parcelable объекты между приложениями.

...