Работа с диалогом запускается только один раз при нескольких вызовах startActivity. - PullRequest
0 голосов
/ 28 октября 2011

У меня интересная проблема. У меня есть приложение Service в моем приложении для Android, которое синхронизируется с сервером и, если приходит новый заказ, отображает уведомление и диалоговое окно с кнопками SHO / DISMISS. Поскольку мне нужно отображать диалоговое окно независимо от выполняемого в данный момент действия, я реализовал его как еще одно действие, запускающее это из службы, когда появляется новый заказ.

Действие не устанавливает никакого представления, просто создает AlertDialog. Кнопка SHOW запускает OrdersListActivity, а кнопка DISMISS просто закрывает диалоговое окно. Все отлично работает, но только в первый раз. Если я закрываю диалоговое окно и появляется другой заказ, он отображается снова. Тем не менее, если я нажимаю на кнопку SHOW, он отображает список OrdersList, но когда позже появляется другой заказ, диалоговое окно не отображается. Хотя, согласно logcat, активность началась. Я возился с этим уже несколько часов, не могли бы вы мне помочь? Спасибо.

Вот метод из моего класса Service (делает уведомление, отправляет широковещательную рассылку и запускает диалог):

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 extends 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;
}

}

Я добавил несколько журналов в методы onCreate и onResume действия NotificationDialog и обнаружил следующее:

  1. При первом запуске действия NotificationDialog эти отладочные сообщения выводятся на печать
  2. Во второй раз, и все остальные разы, они не будут отображаться, хотя logcat говорит: 10-28 10: 00: 38.074: INFO / ActivityManager (63): Запуск: Intent {flg = 0x10000000 cmp = pl .mymeal.orders / .services.NotificationDialog} из pid 1001

1 Ответ

2 голосов
/ 28 октября 2011

Измените флаг на FLAG_ACTIVITY_CLEAR_TOP. Только учтите, что нет никакой привязанности к новым данным с сервера.

...