1

我正在使用 Intents 来保存数据并在我的应用程序的其他位置恢复它们。我在其他地方使用过它们,但现在,它并没有像我希望的那样工作。

public class GCMIntentService extends GCMBaseIntentService {    
    public GCMIntentService() {
        super(ConstantsGCM.GCM_SENDER_ID);
    }



    @Override
    protected void onMessage(Context context, Intent intent) {
        ...
        String ns = Context.NOTIFICATION_SERVICE;   
        NotificationManager notManager = (NotificationManager) context.getSystemService(ns);
        String room = intent.getExtras().getString(ConstantsGCM.GCM_ROOM);      
        Intent notIntent;       
        PendingIntent contIntent;
        Notification notif; 


        notif = new Notification(icon, textStatus, time);                       
        notIntent = new Intent(contexto,RoomsActivity2.class);

        Bundle b2 = new Bundle();                                           
        b2.putString(ConstantsRooms.ROOM, room);
        notIntent.putExtras(b2);

        contIntent = PendingIntent.getActivity(contexto, 0, notIntent, 0);               
        notif.setLatestEventInfo(contexto, tittle, description, contIntent);    
        notif.flags |= Notification.FLAG_AUTO_CANCEL;                   
        notManager.notify((int)(Math.random()*1000), notif);

此代码在通知到来时执行。当我单击此通知时,它会执行 Activity RoomsActivities2.class。在这里,我只是调用这段代码:

public String getMessageString(String cod){
    String result = "";
    bundle  = getIntent().getExtras();

    if (bundle != null){
        result = bundle.getString(cod);
    }
    return result;
}

但是,我没有得到 Intent 中保存的最后一个数据。怎么了?我想我没有正确使用它。为什么我无法从活动中获取数据?

我认为它正在发生的事情是:应用程序收到很多通知,第一个工作正常。但是,如果我不断收到更多通知,则数据不会被覆盖,并且我总是得到第一个,尽管当我调试代码时,我正在设置另一个数据。

4

1 回答 1

2

好的,我已经有一段时间没有处理待处理的意图了,但我记得两件事:

代替:

contIntent = PendingIntent.getActivity(contexto, 0, notIntent, 0);

和:

contIntent = PendingIntent.getActivity(contexto, 0, notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

这将保持捆绑。

但是该标志将用最新的意图覆盖任何现有的待处理意图,您可能不希望这样。

如果您有来自同一上下文的多个待处理意图且具有相同的意图(但不同的捆绑包!),您可以使用第二个参数。

contIntent = PendingIntent.getActivity(contexto, requestCode, notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

只要每个待处理的意图都有一个唯一的requestCode,并且即使谷歌开发人员的文档说没有使用该参数,它实际上确实可以用于识别待处理的意图并允许使用不同的捆绑包进行重复。

于 2013-06-21T03:46:40.607 回答