透明活动正在开展主要活动。如何打开它而不是主要活动?

时间:2012-08-14 02:08:08

标签: android android-activity notifications

我正在构建一个显示通知的应用程序,在点击通知时,我想打开一个透明的对话框,如活动,其中包含与该通知相关的选项。

我定义了一个透明活动,并将其注册在这样的通知中。

 Intent notificationIntent = new Intent(context, EasyToDoReminder.class);
 PendingIntent contentIntent = PendingIntent
                                .getActivity(context, 0, notificationIntent, 0);

活动开始,但主要活动在其后面进行了统计。如何独立打开提醒活动?

而我并不想展示对话。我想将活动看作一个对话框。我已经在使用你提到的主题了。我还有一项主要活动。当我尝试启动像活动这样的透明对话框时,主要活动就是开始,然后开始执行像活动这样的对话框。

任何人都可以建议以更好的方式做到这一点吗?

9 个答案:

答案 0 :(得分:3)

好吧,我也有这个问题 使用另一个LAUNCHER活动进行第二次活动

清单:

    <activity android:name=".popup.PopUp"
              android:label="~.Popup"
              android:theme="@style/Theme.Transparent"
              android:launchMode="singleInstance"
              android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

并且意图:

        Intent i = new Intent();
        i.setClass(service.getBaseContext(), PopUp.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_SINGLE_TOP |
                Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        i.putExtra("id", id + "");
        context.startActivity(i);

如果您从服务中拨打电话,请使用 service.getBaseContext() ,如果您不只是使用 上下文

答案 1 :(得分:1)

如果不启动活动,则无法启动对话框。我认为您需要执行以下操作:

  • 创建一个新活动,将其样式更改为对话框样式:
    • android:theme="@android:style/Theme.Dialog"
  • 在此新活动中,添加用户点击通知时您想要发生的所有内容。
  • 将您的通知与之相关联。

现在,当您单击通知时,对话框将会显示。

答案 2 :(得分:1)

就像booger所说的那样,将android:theme="@android:style/ThemeDialog"添加到您的清单的<application ... </application>部分,让您的主要活动只显示为一个没有背景的对话框。

您还可以使用带有按钮的警告对话框,该对话框可以激活您想要的选项,而不是进行第二项活动:AlertDialog reference

答案 3 :(得分:1)

您需要从主要活动中调用finish();,以便它不会重新出现在所有其他活动的后面。

更好地解释Unexpected behavior when launching a dialog-style activity

答案 4 :(得分:1)

我解决了我的问题。

首先,我在第二个活动的matifest文件中添加了属性,如下所示。

android:launchMode="singleTask"

在通知发出时,我将以下标志设置为意图。

Intent notificationIntent = new Intent(context, EasyToDoReminder.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET );

它有效!!

答案 5 :(得分:1)

这就是我的诀窍 -

对于结果意图,请执行以下操作:

public void onReceive(Context context, Intent intent) {
    ... 
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ...
}

对于封装对话框警报的活动,执行此操作(在清单文件中):

     <activity
        android:launchMode="singleInstance"
    </activity>

希望这会有所帮助......

答案 6 :(得分:0)

我认为如果没有首先开始一个活动,我就不能启动一个Dialog(我想你想要做的就是这个)。

您可以将主要活动的样式设置为对话框 - 但除此之外,我认为如果没有将活动上下文绑定到对话框,则无法启动对话框。

我可能会误解你的问题。

答案 7 :(得分:0)

您可以尝试弹出窗口,然后在该弹出窗口内膨胀您的布局。 或者,使用android:theme =“@ android:style / Theme.Dialog”来获取对话效果,当它实际上是一个活动时

答案 8 :(得分:0)

在清单文件中为对话活动设置android:taskAffinityandroid:launchMode="singleTask"。此answer的所有信用。