Отправка объекта службе через Intent без привязки
Можно ли отправить объект в службу Android через намерение без фактического привязки к службе? Или, возможно, другой способ для Службы получить доступ к объектам...
Ответы
Ответ 1
Вы можете вызвать startService (Intent) следующим образом:
MyObject obj = new MyObject();
Intent intent = new Intent(this, MyService.class);
intent.putExtra("object", obj);
startService(intent);
Объект, который вы хотите отправить, должен реализовывать Parcelable (вы можете ссылаться на этот Руководство по перенапряжению)
class MyObject extends Object implements Parcelable {
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
}
}
И с Сервисом, в методе onStart() или onStartCommand() для 5-го уровня api и более нового, вы можете получить объект:
MyObject obj = intent.getParcelableExtra("object");
Что все:)
Ответ 2
Если вы не хотите внедрять Parcelable, а ваш объект сериализуем
используйте этот
В отправителе Activiy
Intent intent = new Intent(activity, MyActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("my object", myObject);
intent.putExtras(bundle);
startActivity(intent);
В приемнике:
myObject = (MyObject) getIntent().getExtras().getSerializable("my object");
Хорошо работает для меня. Но объект должен быть сериализуемым:)
Ответ 3
Как сказал Бино, вам нужно, чтобы ваш пользовательский объект реализовал интерфейс Parcelable, если вы хотите передать его службе через намерение. Это сделает объект "сериализуемым" в смысле IPC для Android, чтобы вы могли передать их на вызов объекта intExtra (String, Parcelable).
Для простых примитивных типов уже существует набор методов setExtra (String, primitive type). Однако, я понимаю вас, это не вариант для вас, поэтому вы должны пойти на посылку.