在android中单击通知

在android中单击通知,android,android-intent,android-activity,notifications,android-viewpager,Android,Android Intent,Android Activity,Notifications,Android Viewpager,我有一个正在运行服务的应用程序。服务根据时间发送通知(比如在11小时发送一个通知,在11:30发送另一个通知) 当用户单击通知时,我必须在应用程序中显示一个弹出窗口(Android中的对话框类) 我的解决方案是:当用户单击通知时,我启动应用程序的main活动,然后显示对话框 问题是:单击会将用户带到应用程序的第一个屏幕。如果用户在单击通知时处于其他屏幕中(我在应用程序中使用视图寻呼机),我希望对话框显示在用户当前所在的屏幕上,而不是第一个屏幕上 我如何解决这个问题?感谢您的解决方案。一种方法是在

我有一个正在运行服务的应用程序。服务根据时间发送通知(比如在11小时发送一个通知,在11:30发送另一个通知)

当用户单击通知时,我必须在应用程序中显示一个弹出窗口(Android中的对话框类)

我的解决方案是:当用户单击通知时,我启动应用程序的main活动,然后显示对话框

问题是:单击会将用户带到应用程序的第一个屏幕。如果用户在单击通知时处于其他屏幕中(我在应用程序中使用视图寻呼机),我希望对话框显示在用户当前所在的屏幕上,而不是第一个屏幕上


我如何解决这个问题?感谢您的解决方案。

一种方法是在应用程序类上创建对当前活动的静态引用(关于如何创建应用程序类的示例:)

有了应用程序类,您应该创建一个静态上下文,如:

public static FragmentActivity currentActivity;
现在,您应该在已创建的每个Activity.onCreate上填充此实例

之后,您可以使用这个静态上下文来创建对话框


关于,

对于要在用户所在的同一屏幕上显示的对话框,最好为您介绍一个主题。如果是以对话框为主题的活动,请向您的通知生成器添加一个待定的意图。比如:

    // This sets the pending intent that should be fired when the user clicks the
    // notification. Clicking the notification launches a new activity.
         Intent intent = new Intent(this, YourDialogActivity.class);
        //set flags according to your implementation
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);
//       startActivity(intent);

            // Because clicking the notification launches a new ("special") activity, 
            // there's no need to create an artificial back stack.
            PendingIntent resultPendingIntent =
                     PendingIntent.getActivity(
                     this,
                     0,
                     intent,
                   PendingIntent.FLAG_ONE_SHOT //also check the flags here
            );
            mBuilder.setContentIntent(resultPendingIntent);

        // Gets an instance of the NotificationManager service
        NotificationManager mNotifyMgr = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
        // Builds the notification and issues it.
        mNotifyMgr.notify(integerHere, mBuilder.build());  
在清单中,使用主题对话框添加活动:

  <activity
            android:name="com.package.YourDialogActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Dialog" />  


这样,,您不会调用应用程序的MainActivity,DialogActivity只会打开应用程序,并显示上次在应用程序最小化时打开的活动对话框。

然后在
通知中将
页面位置设置为
挂起的意图
,并在
MainActivity
中获取此值,然后按如下方式加载页面在您的
查看页面中的每个位置
。感谢您的解决方案,它解决了我在问题中提到的问题,我还需要处理以下情况:当用户单击通知时,如果应用程序尚未运行,我必须在后台显示包含主要活动的对话框(即启动应用程序,然后显示对话框)。你能告诉我如何处理这个案子吗?不客气,请投票/接受相应的答案。您需要检查服务中的应用程序状态,如果应用程序未运行,则需要启动您的应用程序,因此在启动主活动时只需在intent中传递一个标志/值,并在onCreate或onResume中检查该intent的值,从而显示对话框。我认为您当前的实现将在这方面对您有所帮助。你可以把它放在一个if-else里