2010-02-12 36 views

Trả lời

24

Bạn có thể gọi startService (Ý định) như thế này:

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

Đối tượng mà bạn muốn gửi phải thực hiện Parcelable (bạn có thể tham khảo Percelable guide này)

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 

    } 

} 

và với các dịch vụ, trong phương thức onStart() hoặc onStartCommand() cho cấp api 5 và mới hơn, bạn có thể nhận được các đối tượng:

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

Đó là tất cả :)

+0

Làm thế nào để gửi nhiều hơn một giá trị dữ liệu duy nhất cho bưu kiện? Tôi có hai chuỗi Tôi cần gửi. – jax

+0

intent.putExtra ("my.first.string", "something"); intent.putExtra ("my.second.string", "something else"); – hackbod

+0

Điều này vẫn không hoạt động đối với tôi. Tôi đã làm tất cả những điều trên nhưng vẫn gặp sự cố. Làm thế nào tôi có nghĩa là để vượt qua toàn bộ trạng thái của đối tượng thông qua Parcelable? Tôi biết tôi có thể gửi các loại cơ bản như String và mảng nhưng bởi đối tượng chứa các lớp phức tạp hơn chỉ là những. – jax

1

Giống như Bino đã nói, bạn cần phải có đối tượng tùy chỉnh của bạn triển khai giao diện Parcelable nếu bạn muốn chuyển nó tới dịch vụ thông qua mục đích. Điều này sẽ làm cho đối tượng "có thể tuần tự hóa" trong cảm giác khôn ngoan của Android IPC để bạn có thể truyền chúng tới đối tượng của một đối tượng Intent (String, Parcelable) của đối tượng Intent.

Đối với các kiểu nguyên thủy đơn giản, đã có một loạt các phương thức setExtra (String, nguyên thủy). Tuy nhiên, như tôi hiểu bạn, đây không phải là một lựa chọn cho bạn, đó là lý do tại sao bạn nên đi mua bưu kiện.

8

Nếu bạn không muốn thực hiện Parcelable và đối tượng của bạn là serializable

sử dụng này

Trong người gửi Activiy

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

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

intent.putExtras(bundle); 

startActivity(intent); 

Trong người nhận:

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

Làm việc tốt cho tôi thử. Nhưng đối tượng phải được serializable :)

+0

Đối với tôi nếu làm việc, nhưng tôi phải thay đổi điều gì đó, trên phần gửi: 'intent.putExtra (" đối tượng được truyền ", bundle.getSerializable (" đối tượng của tôi "));' Và trên phần nhận: 'myObject = (MyObject) intent.getExtras(). GetSerializable (" đối tượng được truyền ");' – Ruocco

Các vấn đề liên quan