Ich möchte eine georderte Sendung in einem PendingIntent senden. Aber ich habe nur gefunden PendingIntent.getBroadcast(this, 0, intent, 0)
, die ich denke, kann nur eine regelmäßige Sendung senden. Was kann ich also tun?So senden Sie eine georderte Sendung in einem PendingIntent?
Antwort
Ich habe diese von http://justanapplication.wordpress.com/tag/pendingintent-getbroadcast:
Wenn das onFinished Argument nicht null ist dann eine geordnete Sendung durchgeführt wird.
Sie möchten vielleicht versuchen, PendingIntent.send mit dem onFinished Argumentsatz aufzurufen.
Allerdings stieß ich auf das Problem, dass ich einen OrderedBroadcast von einer Benachrichtigung senden musste. Ich habe es funktioniert, indem Sie einen BroadcastReceiver erstellen, der die Absicht nur als OrderedBroadcast weiterleitet. Ich weiß wirklich nicht, ob das eine gute Lösung ist.
Also begann ich, indem eine Intent zu schaffen, die den Namen der Aktion hält an als Extra weiterleiten:
// 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.
In meinem Fall habe ich die PendingIntent auf eine Benachrichtigung:
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);
Dann definiert ich die folgenden Empfänger in meinem Manifest:
<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>
Dann wird die OrderedBro adcastForwarder sieht wie folgt aus:
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);
}
}