2010-05-07 3 views
1

У меня есть приложение, которое прослушивает в фоновом режиме, и когда пользователь нажимает «отправить», он отображает диалог. Однако мне нужно перенести мое приложение на передний план, чтобы пользователь ответил на некоторые вопросы, прежде чем позволить отправить сообщение. но я не был в состоянии сделать это, это код в моем SendListener:Проблема с подключением приложения Blackberry к Foreground

SendListener sl = new SendListener(){ 

       public boolean sendMessage(Message msg){ 

        Dialog myDialog = new Dialog(Dialog.D_OK, 
         "message from within SendListener", 
         Dialog.OK,Bitmap.getPredefinedBitmap(Bitmap.EXCLAMATION), 
         Dialog.GLOBAL_STATUS) 
        { 
         //Override inHolster to prevent the Dialog from being dismissed 
         //when a user holsters their BlackBerry. This can 
         //cause a deadlock situation as the Messages 
         //application tries to save a draft of the message 
         //while the SendListener is waiting for the user to 
         //dismiss the Dialog. 

         public void inHolster() 
         { 

         } 
        }; 
        //Obtain the application triggering the SendListener. 
        Application currentApp = Application.getApplication(); 

        //Detect if the application is a UiApplication (has a GUI). 
        if(currentApp instanceof UiApplication) 
        { 
         //The sendMessage method is being triggered from 
         //within a UiApplication. 
         //Display the dialog using is show method. 
         myDialog.show(); 
         App.requestForeground(); 
        } 
        else 
        { 
         //The sendMessage method is being triggered from 
         // within an application (background application). 
         Ui.getUiEngine().pushGlobalScreen(myDialog, 1, 
          UiEngine.GLOBAL_MODAL); 
        } 
        return true; 
       } 
      }; 
      store.addSendListener(sl); 

App является объект, который я создал выше:

Application App = Application.getApplication(); 

Я также пытался вызвать приложение к перед тем, как использовать его processID, но пока не повезло.

ответ

1

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

первый я мог предлагаю вам попробовать это получить блокировку событий до нажатия на экран, аля:

synchronized(Application.getEventLock()){ 
    final UiEngine ui = Ui.getUiEngine(); 
    ui.pushGlobalScreen(theScreen, 1, UiEngine.GLOBAL_MODAL); 
} 

Я также хотел бы просто создать пользовательский класс типа и нажмите в начало, что вместо обычного диалога.

+0

если я нажимаю экран так, как вы предлагали здесь, было бы лучше, чем нажатие MainScreen? или это только два способа достижения одного и того же результата? – Tsundoku

+0

theScreen переменная имеет тип MainScreen или PopupScreen (я использовал оба варианта успешно). – bryanallott

+0

Я создал UiScreen uiscreen = новый UiScreen(); (Который расширяет начало В) и сделал это внутри sendListener: синхронизированы (Application.getEventLock()) { \t \t \t \t \t окончательным UiEngine Ui = Ui.getUiEngine(); \t \t \t \t \t ui.pushGlobalScreen (uiscreen, 1, UiEngine.GLOBAL_MODAL); \t \t \t \t} У меня есть незаконный аргумент Исключение =/Я что-то пропустил? есть ли способ, которым мы могли бы поговорить об этом немного больше? это школьный проект, и я собираюсь достигнуть крайнего срока =/ – Tsundoku

0

Закрепите экземпляр своего приложения в своем прослушивателе при его создании и используйте его при запуске sendMessage.

Application.getApplication() получает только приложение вызывающего потока.

+0

Как мне кэшировать мое приложение? (Я буду продолжать искать в Google) – Tsundoku

1

Там, что лучше (теперь с форматированием кода).

public class MYSendListener implements SendListener { 
    private UiApplication _myApp; 

    public MySendListener(UiApplication myApp) { 
     _myApp = myApp; 
    } 

    public boolean sendMessage(Message m) { 
     ... 
     _myApp.requestForeground(); 
    } 
} 
Смежные вопросы