如何在不显示父活动的情况下显示活动?

时间:2013-09-18 18:42:48

标签: android android-intent android-pendingintent android-broadcast

我有一个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>

2 个答案:

答案 0 :(得分:1)

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

来自docs的FLAG_ACTIVITY_NEW_TASK-的问题:

  

使用此标志时,如果某个任务已在运行该活动   你现在开始,然后一个新的活动将不会开始;   相反,当前的任务将被简单地带到前面   屏幕显示它最后的状态。

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

答案 1 :(得分:0)

android:launchMode="singleInstance"的{​​{1}}标记中使用DialogActivity。这将是正确的。