как управлять графическим интерфейсом от слушателя - PullRequest
0 голосов
/ 08 июля 2010

У меня есть класс Listener, который реализует ViewListener (содержит два метода open, close, которые будут срабатывать, когда электронная почта любого отслеживаемого почтового ящика открыта / закрыта).Так что это вызывается из класса App, расширяющего UiApplication, и когда я читаю электронную почту, запускается метод open, я хотел бы вызвать свой оригинал (класс App) с определенным экраном (отправка сообщения в приложение была бы достаточно хорошей),В настоящее время у меня есть так, чтобы у приложения была статическая переменная, которая хранит экземпляр приложения, работающего на устройстве.Я использовал это, чтобы вызвать метод для изменения экрана, но на самом деле это не вызывает.app.requestForeground (), похоже, тоже не работает.

Есть идеи?

Большое спасибо!

1 Ответ

0 голосов
/ 08 июля 2010

Вы пытались использовать ApplicationManager , чтобы справиться с этим?Если у вас есть фоновый системный процесс, прослушивающий события, возможно, ваш GUI-процесс даже не запущен (т. Е. Если вы сделали System.exit(0), а не фоновую обработку).Вот фрагмент кода, который можно использовать для поиска процесса графического интерфейса пользователя (на основе его дескриптора приложения) и либо вывести его на передний план (если он запущен), либо запустить его (если это не так):

// Check if app is already running
ApplicationDescriptor descriptor = [descriptor for your GUI entrypoint];
ApplicationManager appManager = ApplicationManager.getApplicationManager();
int pid = appManager.getProcessId(descriptor);
if (pid != -1) {
    // App is running, bring it to the foreground
    appManager.requestForeground(pid);
} else {
    // App is not running, so launch it
    try {
        appManager.runApplication(descriptor);
    } catch (ApplicationManagerException e) {
        // Can't launch
    }
}

Чтобы получить дескриптор приложения для вашей точки входа GUI, используйте следующую методологию:

  1. Получите дескриптор модуля, используя CodeModuleManager.getModuleHandleForClass(MyApp.class)
  2. Получите список дескрипторов приложения для дескриптора, используяCodeModuleManager.getApplicationDescriptors(handle)
  3. Проверяйте флаги в каждом дескрипторе, пока не найдете один из них, равный «0».Это означает, что это не дескриптор системы / автозапуска / запуска при запуске - возможно, ваша точка входа в GUI.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...