2012-06-14 11 views

risposta

4

ho ricevuto questo da http://justanapplication.wordpress.com/tag/pendingintent-getbroadcast:

Se l'argomento onFinished non è nullo, allora viene eseguita una trasmissione ordinata.

Quindi si potrebbe provare a chiamare PendingIntent.send con il set di argomenti onFinished.

Tuttavia, mi sono imbattuto nel problema che ho dovuto inviare un OrderedBroadcast da una notifica. Ho funzionato creando un BroadcastReceiver che inoltra l'Intent come OrderedBroadcast. Non so davvero se questa sia una buona soluzione.

Così ho iniziato con la creazione di un intento che contiene il nome dell'azione di trasmettere come un extra:

// the name of the action of our OrderedBroadcast forwarder 
Intent intent = new Intent("com.youapp.FORWARD_AS_ORDERED_BROADCAST"); 
// the name of the action to send the OrderedBroadcast to 
intent.putExtra(OrderedBroadcastForwarder.ACTION_NAME, "com.youapp.SOME_ACTION"); 
intent.putExtra("some_extra", "123"); 
// etc. 

Nel mio caso ho passato la PendingIntent a una notifica:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
Notification notification = new NotificationCompat.Builder(context) 
     .setContentTitle("Notification title") 
     .setContentText("Notification content") 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentIntent(pendingIntent) 
     .build(); 
NotificationManager notificationManager = (NotificationManager)context 
    .getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify((int)System.nanoTime(), notification); 

Poi ho definito i seguenti ricevitori nel mio manifesto:

<receiver 
    android:name="com.youapp.OrderedBroadcastForwarder" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.youapp.FORWARD_AS_ORDERED_BROADCAST" /> 
    </intent-filter> 
</receiver> 
<receiver 
    android:name="com.youapp.PushNotificationClickReceiver" 
    android:exported="false"> 
    <intent-filter android:priority="1"> 
     <action android:name="com.youapp.SOME_ACTION" /> 
    </intent-filter> 
</receiver> 

Poi l'OrderedBro adcastForwarder ha il seguente aspetto:

public class OrderedBroadcastForwarder extends BroadcastReceiver 
{ 
    public static final String ACTION_NAME = "action"; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Intent forwardIntent = new Intent(intent.getStringExtra(ACTION_NAME)); 
     forwardIntent.putExtras(intent); 
     forwardIntent.removeExtra(ACTION_NAME); 

     context.sendOrderedBroadcast(forwardIntent, null); 
    } 
} 
Problemi correlati