Отправка объекта службе через 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). Однако, я понимаю вас, это не вариант для вас, поэтому вы должны пойти на посылку.