Отправка объекта в службу через Intent без привязки - PullRequest
15 голосов
/ 12 февраля 2010

Можно ли отправить объект в службу Android через намерение без фактической привязки к службе? Или, может быть, у Сервиса есть другой способ доступа к Объектам ...

Ответы [ 3 ]

25 голосов
/ 12 февраля 2010

Вы можете вызвать startService (Intent) следующим образом:

MyObject obj = new MyObject();
Intent intent = new Intent(this, MyService.class);
intent.putExtra("object", obj);
startService(intent);

Объект, который вы хотите отправить, должен реализовывать Parcelable (вы можете обратиться к этому Percelable guide )

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 () для API уровня 5 и новее вы можете получить объект:

MyObject obj = intent.getParcelableExtra("object");

Вот и все:)

8 голосов
/ 01 августа 2013

Если вы не хотите реализовывать Parcelable и ваш объект сериализуем

используйте это

В отправителе Активий

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");

Работает нормально, попробуй. Но объект должен быть сериализуемым:)

1 голос
/ 17 сентября 2010

Как сказал Бино, ваш пользовательский объект должен реализовывать интерфейс Parcelable, если вы хотите передать его службе через намерение. Это сделает объект «сериализуемым» в смысле Android IPC, так что вы можете передать их в вызов объекта Intent putExtra (String, Parcelable).

Для простых примитивных типов уже есть набор методов setExtra (String, примитивный тип ). Как я понимаю, однако, это не вариант для вас, поэтому вы должны пойти за посылкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...