android - 如何正确使用 Intent

标签 android android-intent

我正在使用 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 中保存的最后一个数据。怎么了?我想我没有正确使用它。为什么我无法从 Activity 中获取数据?

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

最佳答案

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

代替:

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

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

这将保持 bundle 。

但是该标志将用最新的 Intent 覆盖任何现有的未决 Intent ,您可能不希望这样。

如果您有来自同一上下文的多个待处理 Intent 且具有相同的 Intent (但不同的 bundle !),您可以使用第二个参数。
contIntent = PendingIntent.getActivity(contexto, requestCode, notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

只要每个待处理的 Intent 都有一个唯一的 requestCode ,即使谷歌开发者的文档说没有使用该参数,它实际上确实用于识别待处理的 Intent 并允许使用不同的 bundle 进行重复。

关于android - 如何正确使用 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17224307/

相关文章:

java - 我的应用程序注销问题。应用不断崩溃

java - 透明度 webView

android - 使用ADB安装Android Build:INSTALL_FAILED_VERSION_DOWNGRADE

android - 在 Google Play 商店中重命名应用程序

Android:如何从图库中打开图像?

java - 无法启动 Activity ComponentInfo

java - 过渡不起作用

java - 从 ListView 和数据库以及 onitemlongclick 监听器中删除值

android - 最佳实践 - 将您的应用添加到 Android 共享菜单

android - addProximityAlert最初可以工作