是否可以通过Intent将对象发送到Android服务而不实际绑定到服务?或者也许是服务访问对象的另一种方式......
答案 0 :(得分:24)
您可以像这样调用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
}
}
使用Service,在onStart()或onStartCommand()方法中,对于api级别5和更高版本,您可以获取对象:
MyObject obj = intent.getParcelableExtra("object");
这就是全部:)
答案 1 :(得分:8)
如果您不想实施 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");
适合我的工作尝试。但该对象必须是可序列化的:)
答案 2 :(得分:1)
就像Bino所说,如果你想通过意图将它传递给服务,你需要让你的自定义对象实现Parcelable接口。这将使对象在Android IPC方面“可序列化”,以便您可以将它们传递给Intent的对象putExtra(String,Parcelable)调用。
对于简单的基元类型,已经有一堆setExtra(String,基本类型)方法。但是,据我所知,这不是你的选择,这就是为什么你应该选择一个包裹。