活动没有获得新的意图

时间:2011-04-11 22:39:23

标签: android

由于各种原因,我的应用会在通知栏中创建条目。当用户点击通知时,我想显示以特定格式显示条目的自定义活动。

Intent intent = new Intent(applicationContext, TextMessageViewerActivity.class);
intent.putExtra("text_message", someText);
PendingIntent contentIntent = PendingIntent.getActivity(applicationContext, 0, intent, 0);
// now create a notification and post it. no fancy flags

这一切都归结为通过Intent extra发送字符串,并在我的Activity中显示。发生的事情是,传递给我的Activity的第一个Intent以某种方式“卡住”,并且传递给它的所有其他Intent只显示第一个Intent的额外内容。

public class TextMessageViewerActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text_viewer);
    }

    @Override
    public void onResume()
    {
        super.onResume();

        Intent startingIntent = getIntent();
        String message = startingIntent.getStringExtra("text_message");
        String displayMessage = message != null ? message : "No message found";

        ((TextView)findViewById(R.id.text_viewer_text_id)).setText(displayMessage);
    }
}

我对Android Activity生命周期有何了解?

2 个答案:

答案 0 :(得分:2)

我今天学到了新的东西:PendingIntent.getActivity可能会为给定的PendingIntent返回相同的Activity。要为要发送的每个唯一PendingIntent创建唯一Intent,您必须在创建时指定PendingIntent.FLAG_ONE_SHOT标记。

例如,上面代码中的PendingIntent创建行应该是:

PendingIntent contentIntent = PendingIntent.getActivity(applicationContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);

答案 1 :(得分:0)

我认为您需要使用onNewIntent()功能。它会更改您的Activity看到的意图。用法:

/**
  * onResume is called immediately after this.
  */
@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    resolveIntent(intent);
}

这里resolveIntent用于实际处理新的传入意图。查看文档here