开发者

Sending an object to a service through Intent without binding

Is is possible to send an object to an Android Service through an Intent without actually binding to the service? Or maybe another way for the Service to开发者_开发问答 access Objects...


You can call startService(Intent) like this:

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

The object you want to send must implement Parcelable (you can refer to this 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

    }

}

And with the Service, in the method onStart() or onStartCommand() for api level 5 and newer, you can get the object:

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

That's all :)


If you don't want to implement Parcelable and your object is serializable

use this

In the sender Activiy

Intent intent = new Intent(activity, MyActivity.class);

Bundle bundle = new Bundle();
bundle.putSerializable("my object", myObject);

intent.putExtras(bundle);

startActivity(intent);

In the receiver:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object");

Works fine for me try it. But the object must be serializable :)


Like Bino said, you need to have your custom object implement the Parcelable interface if you want to pass it to a service via an intent. This will make the object "serializable" in an Android IPC-wise sense so that you can pass them to an Intent's object putExtra(String, Parcelable) call.

For simple primitive types, there's already a bunch of setExtra(String, primitive type) methods. As I understand you, however, this is not an option for you which is why you should go for a Parcel.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜