2015-04-24 20 views
13

Bir hizmet sınıfından, alarm alıcısı aracılığıyla beklemedeki bir niyetimi iletiyorum. Ancak, bekleyen yangınlardan sonra intent.putExtra() bilgisi broadcastreceiver sınıfı tarafından alınmıyor. İşte bu niyet bekleyen alınan ediliyor alarm alıcı sınıfı aşağıdaintent.putExtra() beklemede niyetinde değil

public String msg, phonen; 

@Override 
public void onReceive(Context context, Intent intent){ 
    Bundle extras = intent.getExtras(); 
    msg = extras.getString("msg"); 
    phonen = extras.getString("phone"); 

    Log.d("onReceive", "About to execute MyTask"); 
    Toast.makeText(context,msg, Toast.LENGTH_LONG).show(); 
} 

tost içinde msg bilgidir pendingIntent

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT); 
aint.putExtra("msg", msg); 
aint.putExtra("phone", phone); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

ateş benim koddur gösterilmiyor. Bunun yerine, boş bir tost gösterilir. Bu bu

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class); 
aint.putExtra("msg", msg); 
aint.putExtra("phone", phone); 



PendingIntent pendingIntent = PendingIntent.getBroadcast(
    getApplicationContext(), 
    id, 
    aint, 
    // as stated in the comments, this flag is important! 
    PendingIntent.FLAG_UPDATE_CURRENT); 

cevap

23

:

 Intent intent = getIntent();  
    msg = intent.getStringExtra("msg"); 
    phonen = intent.getStringExtra("phone"); 

    if(msg!=null){ 
     Toast.makeText(context,msg, 
     Toast.LENGTH_LONG).show(); 
    } 

ve PendingIntent önce Sizin putExtras ters:

+4

ve PendingIntent takılarak önce .putExtra yöntemleri var, 'PendingIntent.FLAG_UPDATE_CURRENT' önemlidir, bu nedenle başka bir çözüme geçmeden önce bu deneyin. – DonutGaz

1

Sen getStringExtra() kullanabilir ve emin olun dize boş değildir zorunda Çünkü ilk olarak Intent'i başlatıyor ve PendingIntent'e ekliyorsunuz. Bundan sonra, niyetle bilgi ekliyorsunuz. Niyete bilgi eklemeli ve ardından bu amacı PendingIntent'e eklemelisiniz.

1

deneyin

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class); 
    aint.putExtra("msg", msg); 
    aint.putExtra("phone", phone); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT); 
0

PendingIntent yapıcısına benzersiz bir kimlik eklemeyi unutmayın veya putExtra değerlerini almaya çalıştığınızda bazı garip şeyler alabilirsiniz.

PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 
      UUID.randomUUID().hashCode(), 
      aint, 
      PendingIntent.FLAG_UPDATE_CURRENT 
    ); 
şuna arayanlar için
İlgili konular