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.
精彩评论