2013-01-17 24 views
5

Hizmetimden CallReceiver sınıfına bir int değeri aktarmaya çalışıyorum, maalesef CallReceiver.value her zaman 0'a eşittir, başka bir değerle ayarlandıktan sonra bile. Bunu yapıcıya bir parametre olarak aktarmaya çalıştığımda, durum tam olarak aynıdır ve bu nedenle hizmetten çağrılan belirleyici yöntemlerle. Orada herhangi bir veri iletmenin gerçek bir yolu yok mu?BroadcastReceiver parametresine geçirme

Hizmeti:

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; 

Alıcı:

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' Eğer' mCallReceiver.value = değer kastettiniz, statik değildir daki 'value' alan;' yerine 'CallReceiver.value = değerin;'? –

cevap

9

Sizin CallReceiver mCallReceiver=new CallReceiver(); örneği Intents'i almak için kullanılmaz. Bunun yerine, Android her defasında yeni örnek oluşturur. Ve sıfırlanmamış tamsayı değişkenleri için varsayılan değer 0'dır.

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

ve değeri her zaman olacaktır eşit 5.

BroadcastReceiver veri geçirerek gelince, bunu ekleyin: Bu value alana bazı varsayılan değer atamak, ne olduğundan emin olmak için

seninyılında, daha sonra

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

Ve: Intent sen yayınlayan olarak ekstra 210:

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

'CallReceiver' burada söz konusu olan sınıf bile değil. Değiştirmek istediği değer "RReceiver" –

+0

'da bulunuyor. Yani, herhangi bir değer göndermenin bir yolu yok mu? – Kristopher

+0

@soulreaver Bu değeri, hizmetinizden yayınladığınız "Niyet" e fazla koymalısınız. –

İlgili konular