2013-01-17 18 views
5

Próbuję przekazać wartość int z mojej usługi do klasy CallReceiver, niestety wartość CallReceiver.value zawsze wynosi 0, nawet po ustawieniu z inną wartością. Kiedy próbuję przekazać go jako parametr do konstruktora sytuacja jest dokładnie taka sama, a więc z metodami ustawiającymi wywołanymi z usługi. Czy naprawdę nie ma sposobu, aby przekazać tam jakiekolwiek dane?Przekazywanie parametrów do BroadcastReceiver

Usługa:

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; 

Odbiornik:

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

swojej dziedzinie 'value' w' CallReceiver' nie jest statyczna, nie znaczy 'mCallReceiver.value = wartość;' zamiast 'CallReceiver.value = value;'? –

Odpowiedz

9

instancję CallReceiver mCallReceiver=new CallReceiver(); nie służy do odbierania zamiary. Zamiast tego Android tworzy za każdym razem nową instancję. A 0 jest domyślną wartością dla niezainicjowanych zmiennych całkowitych.

Aby upewnić się, to co się dzieje, należy przypisać jakąś wartość domyślną do value polu:

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

a wartość będzie zawsze równa 5.

chodzi o przekazywanie danych do BroadcastReceiver, dodaj go jako dodatkowy do Intent jesteś nadawania:

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

a potem, w swoim CallReceiver:

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

'CallReceiver' nie jest nawet klasą, o której tu mowa. Wartość, którą chce zmienić, znajduje się w "RReceiver" –

+0

. Nie ma więc możliwości przesłania tam żadnych wartości? – Kristopher

+0

@ soulreaver Powinieneś umieścić tę wartość jako dodatek do 'Intencji 'nadawanej z twojej usługi. –

Powiązane problemy