2012-06-14 8 views

Odpowiedz

4

mam to od http://justanapplication.wordpress.com/tag/pendingintent-getbroadcast:

Jeśli onFinished argument nie jest null następnie uporządkowana transmisja jest wykonywana.

Możesz spróbować wywołać PendingIntent.send z zestawem argumentów onFinished.

Jednak natknąłem się na problem polegający na tym, że musiałem wysłać rozkaz uporządkowany z powiadomienia. Mam to działa, tworząc BroadcastReceiver, który tylko przesyła Intent jako OrderedBroadcast. Naprawdę nie wiem, czy to dobre rozwiązanie.

Zacząłem więc od utworzenia Intent, która przechowuje nazwę działania do przekazania jako dodatkowy:

// 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. 

w moim przypadku Zdałem PendingIntent do powiadomienia:

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

Potem zdefiniowane następujące odbiorniki w moim manifeście:

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

wtedy OrderedBro adcastForwarder wygląda następująco:

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); 
    } 
} 
Powiązane problemy