2013-01-17 6 views
5

내 서비스에서 CallReceiver 클래스로 int 값을 전달하려고합니다. 불행히도 CallReceiver.value는 다른 값으로 설정된 후에도 항상 0입니다. 생성자에 매개 변수로 전달하려고 할 때 상황은 정확히 동일하므로 서비스에서 호출 된 setter 메서드를 사용하면됩니다. 어떤 데이터도 전달할 방법이 없습니까?BroadcastReceiver에 매개 변수 전달

서비스 :

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; 

수신기 :

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

'CallReceiver' 당신이'mCallReceiver.value = 값을 의미 않았다, 정적되지 않습니다에 '값'필드;'대신'CallReceiver.value = 값;'? –

답변

9

귀하의 CallReceiver mCallReceiver=new CallReceiver(); 인스턴스가 의도을 수신에 사용되지 않습니다. 대신 안드로이드는 매번 새로운 인스턴스를 생성합니다. 0은 초기화되지 않은 정수 변수의 기본값입니다.

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

하고 값은 항상있을 것이다 동일한 5

BroadcastReceiver에 데이터를 전달하는 것처럼, 추가 :이 당신의 value 필드에 몇 가지 기본 값을 할당, 무슨 일 있는지 확인하려면

당신의에, 다음

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

을 그리고 다음 Intent이 방송되는에 관해서 추가210 :

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

'CallReceiver'는 여기서 질문하는 클래스조차하지 않습니다. 그가 바꾸고 싶은 값은'RReceiver'에 있습니다 –

+0

그래서 값을 보낼 방법이 없나요? – Kristopher

+0

@soulreaver 당신은 서비스에서 방송하고있는'Intent '에이 값을 추가해야합니다. –