2012-06-14 49 views

Trả lời

4

Tôi nhận này từ http://justanapplication.wordpress.com/tag/pendingintent-getbroadcast:

Nếu đối số onFinished không phải là null thì một phát sóng lệnh được thực hiện.

Vì vậy, bạn có thể muốn thử gọi số PendingIntent.send với bộ đối số onFinished.

Tuy nhiên, tôi đã gặp sự cố rằng tôi phải gửi một OrderedBroadcast từ Thông báo. Tôi đã làm cho nó hoạt động bằng cách tạo ra một BroadcastReceiver mà chỉ chuyển tiếp Intent như một OrderedBroadcast. Tôi thực sự không biết đây có phải là một giải pháp tốt hay không.

Vì vậy, tôi bắt đầu ra bằng cách tạo ra một Intent mà giữ tên của hành động để chuyển tiếp đến như là một bổ sung:

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

Trong trường hợp của tôi, tôi đã thông qua PendingIntent đến một thông báo:

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

Sau đó, tôi đã xác định những người nhận sau trong Tệp kê khai của mình:

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

Sau đó, OrderedBro adcastForwarder trông như sau:

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); 
    } 
} 
Các vấn đề liên quan