14

我試圖通過PendingIntent發送一些額外的數據,如:如何通過PendingIntent將數據發送到廣播?

MyMessage message; 
//... 
Intent intent; 
SmsManager sms = SmsManager.getDefault(); 
intent = new Intent(Constants.SENT_PLAIN); 
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); //putting long id (not -1L) 
PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent, 0); 
intent = new Intent(Constants.DELIVERED_PLAIN); 
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); 
PendingIntent deliveredPI = PendingIntent.getBroadcast(activity, 0, intent, 0); 
sms.sendTextMessage(phoneNumber, null, message.getBody(), sentPI, deliveredPI); 

然後在Broadcast試圖趕上數據:

@Override 
public void onReceive(Context context, Intent intent) { 
    String message, prefix = ""; 
    String action = intent.getAction(); 
    long id = intent.getLongExtra(Constants.EXTRA_RAW_ID, -1L); //here I receive id=-1 

    // blah-blah.... 
} 

我看到BroadcastonReceive()叫 - 這意味着Broadcast註冊以適當的方式,但仍然額外是空的。

任何想法?

+0

我在這裏做過類似的事! http://stackoverflow.com/questions/14571564/android-pendingintent-extras-not-received-by-broadcastreceiver/14612215#14612215 – toobsco42

回答

34

將數據意圖放入待用意圖中作爲附加。 你會得到onReceive這個意圖BroadCast接收方法。 嘗試按以下方式定義待定意圖。

PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT); 
+0

我會檢查它... – barmaley

+0

是的,它的工作原理!非常感謝! – barmaley

+1

然後標記答案爲接受好友或問題將保持爲未答覆:) .. – om252345

10

pending intent如說:

由於這種行爲,它知道什麼時候兩個目的被認爲是用於檢索的PendingIntent的目的同樣是非常重要的。人們犯的一個常見錯誤是創建多個PenttentIntent對象,其Intents只在其「額外」內容中有所不同,期望每次都得到不同的PendingIntent。這不是發生。用於匹配的意圖部分與Intent.filterEquals定義的部分相同。如果您使用兩個與Intent.filterEquals等效的Intent對象,那麼您將爲它們獲得相同的PendingIntent。

有兩種典型的方法可以解決這個問題。

如果確實需要多個不同的PendingIntent在 對象處於活動狀態的時間(如兩個通知,它們都在同一時間顯示 使用),那麼你將需要確保有一些 是不同的關於他們將它們與不同的 PendingIntents關聯起來。這可以是任何認爲是意圖屬性的由 Intent.filterEquals,或供給到 getActivity(Context, int, Intent, int)getActivities(Context, int, Intent\[\], int)getBroadcast(Context, int, Intent, int),或 getService(Context, int, Intent, int)不同請求的代碼的整數。

如果你只需要一個的PendingIntent活躍在同一時間對於任何 意圖將使用的,那麼你可以選擇使用該標誌 FLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT要麼取消或修改任何現有的PendingIntent與意圖相關 你提供 。

相關問題