2013-01-17 43 views
5

Tôi đang cố gắng chuyển giá trị int từ Dịch vụ của tôi đến lớp CallReceiver, tiếc là CallReceiver.value luôn bằng 0, ngay cả sau khi được đặt bằng một giá trị khác. Khi tôi đang cố gắng để vượt qua nó như là một tham số cho tình hình xây dựng là chính xác như nhau, và như vậy với các phương thức setter được gọi là từ dịch vụ. Có thực sự không có cách nào để vượt qua có bất kỳ dữ liệu?Truyền tham số cho BroadcastReceiver

dịch vụ:

SharedPreferences settings = getSharedPreferences("SETTINGS", 0); 
    int value = settings.getInt("value1", 0); // here the correct value is present, not 0. 
    CallReceiver mCallReceiver = new CallReceiver(); 
    CallReceiver.value = value; 

Receiver:

public class CallReceiver extends BroadcastReceiver { 

public int value; 

public CallReceiver(int value) { 
    this.value = value; 
} 

public CallReceiver() { 

} 


@Override 
public void onReceive(Context context, Intent intent) { 


      Log.v("value", String.valueOf(value)); // here "value" = 0. 


     } 

    } 
+0

trường 'giá trị' trong' CallReceiver' không tĩnh, bạn có nghĩa là 'mCallReceiver.value = value;' thay vì 'CallReceiver.value = value;'? –

Trả lời

9

dụ CallReceiver mCallReceiver=new CallReceiver(); của bạn không được sử dụng để tiếp nhận ý đồ. Thay vào đó, Android tạo ra cá thể mới mỗi lần. Và 0 là giá trị mặc định cho các biến số nguyên chưa được khởi tạo.

Để chắc chắn đây là những gì xảy ra, chuyển nhượng một số giá trị mặc định để value lĩnh vực của bạn:

public class RReceiver extends BroadcastReceiver { 
    public int value=5; 
    //... 
} 

và giá trị của bạn sẽ luôn luôn được bình đẳng 5.

Đối với truyền dữ liệu đến BroadcastReceiver, thêm nó như bổ sung cho các Intent bạn đang phát sóng:

//in your service 
Intent broadcastedIntent=new Intent(this, CallReceiver.class); 
broadcastedIntent.putExtra("VALUE", 100500); 
sendBroadcast(broadcastedIntent); 

Và sau đó, trongcủa bạn 210:

@Override 
public void onReceive(Context context, Intent intent) { 
    int value=intent.getIntExtra("VALUE", 0); 
} 
+0

'CallReceiver' không phải là lớp học được đề cập ở đây. Giá trị mà anh ta muốn thay đổi là trong 'RReceiver' –

+0

Vì vậy, không có cách nào để gửi có bất kỳ giá trị nào? – Kristopher

+0

@soulreaver Bạn nên đặt giá trị này như một phần bổ sung cho 'Intent' bạn đang phát sóng từ dịch vụ của bạn. –

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