我有一个有趣的问题。我在我的Android应用程序中有一个Service实现,它与Server同步,如果有新订单,它会显示一个通知和一个带有SHO / DISMISS按钮的对话框。因为我需要显示对话框而不管当前正在运行的活动,所以我已将其实现为另一个活动,当新订单出现时,从服务启动此活动。
活动未设置任何视图,只需创建一个AlertDialog。 SHOW按钮启动OrdersListActivity,DISMISS按钮只关闭对话框。一切正常,但只是第一次。如果我关闭对话框,并且另一个订单出现,则会再次显示。但是,如果我单击SHOW按钮,它将显示OrdersList,但是当稍后出现另一个订单时,不会显示该对话框。虽然,根据logcat,活动已经开始。我已经搞乱了几个小时了,你能帮我吗?感谢。
以下是我的Service类的方法(发出通知,发送广播并启动Dialog活动):
public void notifyNewOrder(){
Context context = getApplicationContext();
Intent notificationIntent = new Intent(this, OrdersService.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
newOrderNotification.setLatestEventInfo(this, getString(R.string.notification_text), getString(R.string.notification_text), contentIntent);
notificationManager.notify(NOTIFICATION_ID, newOrderNotification);
Intent intent = new Intent(NEW_ORDER_RECEIVED);
sendBroadcast(intent);
Intent dialog = new Intent(context, NotificationDialog.class);
dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialog);
}
以下是NotificationDialog活动类的代码:
公共类NotificationDialog扩展了Activity {
private static final int DIALOG_NEW_ORDER = 0;
private static final String LOG_TAG = "NotificationDialog";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(LOG_TAG, "onCreate - creating activity...");
}
@Override
public void onResume() {
super.onResume();
Log.d(LOG_TAG, "onResume - starting the dialog...");
showDialog(DIALOG_NEW_ORDER);
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case DIALOG_NEW_ORDER:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.notification_dialog_new_order)
.setCancelable(false)
.setPositiveButton(R.string.notification_dialog_show, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
/*
* Cancel the notification
*/
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(OrdersService.NOTIFICATION_ID);
/*
* Go to the list
*/
Intent listIntent = new Intent(getApplicationContext(), OrdersListActivity.class);
startActivity(listIntent);
dialog.dismiss();
finish();
}
})
.setNegativeButton(R.string.notification_dialog_dismiss, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
/*
* Cancel the notification
*/
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(OrdersService.NOTIFICATION_ID);
dialog.dismiss();
finish();
}
});
dialog = builder.create();
break;
default:
dialog = null;
}
return dialog;
}
}
我在NotificationDialog活动的onCreate和onResume方法中添加了一些日志,并发现如下:
答案 0 :(得分:2)
将标记更改为FLAG_ACTIVITY_CLEAR_TOP
。请记住,服务器上的新数据没有任何影响。