2010-02-12 71 views

回答

24

可以調用startService(意向)是這樣的:

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

這是所有:)

+0

如何向包裹發送多個單一數據值?我需要發送兩個字符串。 – jax 2010-02-12 18:10:28

+0

intent.putExtra(「my.first.string」,「something」); intent.putExtra(「my.second.string」,「something else」); – hackbod 2010-02-12 19:09:02

+0

這仍然不適合我。我已經完成了上述所有,但仍然有問題。我如何通過Parcelable傳遞整個對象的狀態?我知道我可以發送像String和Arrays這樣的基本類型,但是按對象包含比這些更復雜的類。 – jax 2010-02-13 05:26:30

1

像BINO說,你需要讓你的自定義對象實現Parcelable接口,如果你想通過一個意圖將它傳遞給一個服務。這將使Android對象成爲「序列化」的對象,以便您可以將它們傳遞給Intent的對象putExtra(String,Parcelable)調用。

對於簡單的原始類型,已經有一堆setExtra(String,原始類型)方法。然而,據我瞭解,這不是您的選擇,因此您應該購買包裹。

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

適合我的工作嘗試。但該對象必須可序列化:)

+0

對我來說,如果工作,但我不得不改變的東西,在發送部分: 'intent.putExtra(「傳遞對象」,bundle.getSerializable(「我的對象」))​​;' 而在接收部分: (myObject)intent.getExtras()。getSerializable(「傳遞的對象」);'' – Ruocco 2015-06-12 14:12:18

相關問題