10

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

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

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

活动开始,但主要活动在其后面。如何独立开启提醒活动?

而且我不想显示对话框。我想显示一个看起来像对话框的活动。我已经在使用你提到的主题了。我还有一项主要活动。当我试图启动我的透明对话框之类的活动时,主要活动开始了,然后开始了对话框之类的活动。

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

4

9 回答 9

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(),并且如果您不只是使用您的上下文

于 2014-07-08T07:04:19.667 回答
2

这就是我的诀窍 -

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

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

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

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

希望这可以帮助...

于 2013-08-24T17:07:40.367 回答
1

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

更好地解释here启动对话框式活动时的意外行为

于 2012-08-16T19:35:54.580 回答
1

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

您还可以使用带有按钮的警报对话框,它可以激活您想要的选项,而不是第二个活动:AlertDialog 参考

于 2012-08-14T02:28:23.437 回答
1

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

  • 创建一个新活动,将其样式更改为对话框样式:
    • android:theme="@android:style/Theme.Dialog"
  • 在这个新活动中,添加您希望在用户单击通知时发生的所有事情。
  • 像您一样将您的通知链接到它。

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

于 2012-08-14T02:18:41.393 回答
1

我解决了我的问题。

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

android:launchMode="singleTask"

在从通知启动时,我将以下标志设置为意图。

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

有用!!

于 2012-08-16T20:09:16.187 回答
0

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

于 2012-08-14T02:21:07.520 回答
0

我认为您必须先启动 Activity 才能启动 Dialog(这就是我认为您正在尝试做的事情)。

您可以将您的主要活动设置为看起来像一个对话框 - 但除此之外,我认为如果没有 Activity 上下文将其绑定到,您将无法启动对话框。

我可能误解了你的问题。

于 2012-08-14T02:11:16.630 回答
0

为您的对话活动设置android:taskAffinityandroid:launchMode="singleTask"在清单文件中。这个答案的所有学分。

于 2015-10-07T11:27:36.853 回答