2013-06-20 4 views
1

Я использую намерения для сохранения данных и восстановления их в других местах моего приложения. Я использовал их в других местах, но теперь он работает не так, как я надеюсь.Как правильно использовать намерение

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

Но, я не получил последние данные, сохраненные в намерении. Что случилось? Я предполагаю, что я не использую его правильно. Почему я не могу получить данные из этой активности?

Что я думаю, что это происходит: Приложение получает много уведомлений, первое работает правильно. Но, если я получаю больше уведомлений, данные не переопределяются, и я всегда получаю первый, хотя, когда я отлаживаю код, я устанавливаю другие данные.

+0

Добро пожаловать в Stackoverflow! Я предлагаю вам использовать отладчик Eclipse или добавлять вызовы Log.d() 'к вашему коду, чтобы выяснить, что происходит. Обучение отладке собственного кода является критическим навыком для каждого программиста. –

+0

Хе-хе, я сделал, я устанавливаю правильные данные в намерении. Но, когда я его восстанавливаю, это похоже на другие данные. Я также искал ссылки на ConstantsRooms.ROOM, чтобы выяснить, где я могу изменить ценность, не зная об этом, но все кажется правильным. Я подумал, что это может быть проблемой, что я не рассказал о жизненном цикле Android. Я продолжу расследование. – Guille

+0

Что заставляет вас думать, что «это похоже на другие данные». Пожалуйста, отредактируйте свой вопрос, чтобы указать конкретные данные, которые вы видели в своей отладке. –

ответ

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, и даже несмотря на документы в Google Dev говорят, этот параметр не используется, он фактически делает служить цели для определения отложенного намерения и позволяет дубликаты с различными пучками.

+0

Большое вам спасибо, это работает очень хорошо. И теперь, я знаю, что это означает, что другие два параметра. Благодарю. – Guille