Проблема, приносящая Приложение для Blackberry к Переднему плану

У меня есть приложение, которое слушает в фоне и когда пользовательские щелчки "отправляют", он отображает диалог. Однако я должен принести свое приложение к переднему плану, таким образом, пользователь отвечает на некоторые вопросы прежде, чем позволить сообщению пойти. но я не смог сделать это, это - код в моем 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();

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

1
задан Tsundoku 7 May 2010 в 19:44
поделиться

3 ответа

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

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

0
ответ дан 3 September 2019 в 00:44
поделиться

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

public class MYSendListener implements SendListener { 
    private UiApplication _myApp; 

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

    public boolean sendMessage(Message m) { 
        ... 
        _myApp.requestForeground(); 
    } 
}
1
ответ дан 3 September 2019 в 00:44
поделиться

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

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

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

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

1
ответ дан 3 September 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: