2013-01-17 14 views
5

Sto provando a passare un valore int dal mio servizio alla classe CallReceiver, sfortunatamente il valore CallReceiver.value è sempre uguale a 0, anche dopo l'impostazione con un altro valore. Quando cerco di passarlo come parametro alla situazione del costruttore è esattamente lo stesso, e così con i metodi setter chiamati dal servizio. Non c'è davvero alcun modo per passare lì i dati?Passare parametri al BroadcastReceiver

Servizio:

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; 

Ricevitore:

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

vostro 'campo value' in' CallReceiver' non è statico, volevi dire 'mCallReceiver.value = valore;' invece di 'CallReceiver.value = valore;'? –

risposta

9

tuo CallReceiver mCallReceiver=new CallReceiver(); esempio non viene utilizzato per la ricezione di intenti. Invece, Android crea ogni volta nuove istanze. E 0 è il valore predefinito per le variabili intere non inizializzate.

Per assicurarsi che questo è ciò che accade, assegnare un valore predefinito al tuo value campo:

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

e il tuo valore sarà sempre uguale 5.

Per quanto riguarda il passaggio di dati a BroadcastReceiver, aggiungerlo come extra al Intent si sta trasmettendo:

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

E poi, nel vostro CallReceiver:

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

'CallReceiver' non è nemmeno la classe in questione qui. Il valore che vuole modificare è in 'RReceiver' –

+0

Quindi, non c'è modo di inviarvi valori? – Kristopher

+0

@soulreaver Dovresti inserire questo valore come extra per l'Intento che stai trasmettendo dal tuo servizio. –

Problemi correlati