2015-04-24 22 views
13

Sto passando un intent in sospeso tramite alarmreceiver, da una classe di servizio. Ma, dopo gli incendi in sospeso, le informazioni intent.putExtra() non vengono ricevute dalla classe broadcastreceiver. Ecco il mio codice per la cottura del pendingIntentintent.putExtra() nell'intento in sospeso non funzionante

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); 

La classe ricevitore allarme è sotto

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(); 
} 

Il msg informazioni in brindisi, che viene ricevuto dal attesa di intenti, non viene mostrato. Invece, viene mostrato un brindisi vuoto.

risposta

23

Prova questo

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); 
+4

Per coloro che cercano a questo e hanno i metodi .putExtra prima di collegare al PendingIntent, il 'PendingIntent.FLAG_UPDATE_CURRENT' è importante, in modo da provare che prima di passare a un'altra soluzione. – DonutGaz

1

Devi usare getStringExtra() e assicurarsi che la stringa non sono nulli:

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

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

e invertire il vostro putExtras prima PendingIntent:

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); 
1

Questo è perché inizialmente si inizializza Intent e si aggiunge a PendingIntent. Successivamente, si aggiungono informazioni nell'intento. Dovresti aggiungere informazioni all'intento, quindi aggiungere questo intento a PendingIntent.

0

Ricordarsi di inserire un ID univoco nel costruttore PendingIntent, oppure si potrebbe ottenere qualcosa di strano quando si tenta di ottenere i valori putExtra.

PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 
      UUID.randomUUID().hashCode(), 
      aint, 
      PendingIntent.FLAG_UPDATE_CURRENT 
    );