我有一个运行服务的应用程序。该服务根据时间发送通知(例如,在11小时发送通知,在11:30时,它发送另一个通知)
当用户点击通知时,我必须在应用程序中显示弹出窗口(Android中的Dialog类)。
我的解决方案是:当用户点击通知然后显示对话框时,我启动应用程序的MainActivity。
问题:Click将用户带到应用程序的第一个屏幕。如果用户在点击通知时在其他屏幕上(我在我的应用程序中使用了一个视图寻呼机),我希望对话框显示在当前用户所在的屏幕上而不是第一个屏幕上
如何解决此问题?谢谢你的解决方案。
答案 0 :(得分:0)
一种方法是在Application类上创建对当前Activity的静态引用(关于如何创建应用程序类的示例:http://www.intertech.com/Blog/androids-application-class/)
拥有Application类,您应该创建一个静态上下文,如:
public static FragmentActivity currentActivity;
现在,您应该在每个Activity.onCreate上填充此实例。
之后,您可以使用此静态上下文来创建对话框。
此致
答案 1 :(得分:0)
对于要在用户所在的同一屏幕上显示的对话框,最好为您介绍一个Theme.Dialog主题活动,并将其添加到您的Notification构建器中。喜欢:
// 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" />
有关详细实施,请参阅:Define the Notification's Action
这样,您就不会调用应用程序的MainActivity,DialogActivity将只打开应用程序并显示最小化应用程序时最后打开的活动对话框。