0

我有一个SMSReceiver类,它扩展了BroadcastReceiver. 收到短信后,我会创建通知。当它被点击时,我开始我自己的(不是主要的!)活动 - DialogActivity

Intent mIntent = new Intent(context, DialogActivity.class);
...
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent mPendingIntent =
    PendingIntent.getActivity(
    context,
    mNotificationId,
    mIntent,
    0
);          
mBuilder.setContentIntent(mPendingIntent);

但是,它始终显示在主要活动的顶部。因此,如果我finish从调用DialogActivity,则会显示主要活动。我怎么能避免呢?

DialogActivity类如下所示:

public class DialogActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog); // android:theme="@android:style/Theme.Dialog"

        Button dialogBtnNo = (Button) findViewById(R.id.dialog_btn_no);

        dialogBtnNo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                finish(); // close this activity
            }
    ...

和清单文件:

   <activity
        android:name="my.package.DialogActivity"
        android:label="@string/title_activity_dialog"
        android:theme="@android:style/Theme.Dialog"
        android:configChanges="keyboardHidden|orientation">
    </activity>
4

2 回答 2

1

在开始新活动之前,使用 FLAG_ACTIVITY_CLEAR_TASK 清除当前任务。

来自文档的 FLAG_ACTIVITY_NEW_TASK- 的问题:

使用此标志时,如果您现在正在启动的 Activity 已经在运行任务,则不会启动新的 Activity;相反,当前任务将简单地以其上次所处的状态被带到屏幕的前面。

此标志在 api 11 或更高版本以及 v4 支持库中可用。

于 2013-09-18T19:22:50.063 回答
0

android:launchMode="singleInstance"DialogActivity标签中使用AndroidManifest.xml。它将正常工作。

于 2014-06-27T02:43:08.463 回答