Проблемы с выводом приложения Blackberry на передний план - PullRequest
1 голос
/ 07 мая 2010

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

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);

Приложение - объект, который я создал выше:

Application App = Application.getApplication();

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

Ответы [ 3 ]

1 голос
/ 10 мая 2010

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

public class MYSendListener implements SendListener { 
    private UiApplication _myApp; 

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

    public boolean sendMessage(Message m) { 
        ... 
        _myApp.requestForeground(); 
    } 
}
1 голос
/ 08 мая 2010

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

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

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

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

0 голосов
/ 08 мая 2010

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

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

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