2015-04-24 10 views
13

Ich bin eine ausstehende Absicht durch Alarmreceiver aus einer Serviceklasse übergeben. Nachdem jedoch pendingIntent ausgelöst wurde, werden die intent.putExtra() - Informationen nicht von der Broadcast-Empfängerklasse empfangen. Hier ist mein Code die PendingIntent zum Brennenintention.putExtra() in ausstehende Absicht funktioniert nicht

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

Der Alarmempfänger Klasse unten ist

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

Die msg Informationen in Toast, dass aus schwebenden Absicht empfangen wird, wird nicht gezeigt werden. Stattdessen wird ein leerer Toast angezeigt.

Antwort

23

dieses Versuchen

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

Für diejenigen, bei dieser Suche und die .putExtra Methoden haben vor zu PendingIntent Befestigung ist das 'PendingIntent.FLAG_UPDATE_CURRENT' wichtig, so versuchen, dass, bevor auf eine andere Lösung übergehen. – DonutGaz

1

Sie haben getStringExtra() zu verwenden und sicher sein, den String nicht null:

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

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

und Reverse Ihre putExtras vor 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

Dies ist weil Sie Intent zuerst initialisieren und zu PendingIntent hinzufügen. Danach fügen Sie Informationen in der Absicht hinzu. Sie sollten Informationen zur Absicht hinzufügen und diese Absicht zu PendingIntent hinzufügen.

0

Denken Sie daran, eine eindeutige ID in den PendingIntent-Konstruktor zu setzen, oder Sie könnten etwas seltsames bekommen, wenn Sie versuchen, die putExtra-Werte zu erhalten.

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