开发者

Trouble bringing a Blackberry App to Foreground

I have an app that is listening in background and when the user clicks "send" it displays a dialogue. However I need to bring my app to foreground so the user answers some questions before letting the message go. but I haven't been able to do this, this is the code in my 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.requestF开发者_运维技巧oreground();
                    }
                    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 is an object I created above:

Application App = Application.getApplication();

I have also tried to invoke the App to foreground using its processID but so far no luck.


i have managed to achieve something similar to what you're describing but the difference is, my dialogs are displayed asynchronously, which might actually be easier... so in your case..

the first i could suggest you try is get the event lock before pushing the screen, ala:

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

I would also just create a custom class of type MainScreen and push that instead of plain Dialog.


There, that's better (now with code formatting).

public class MYSendListener implements SendListener { 
    private UiApplication _myApp; 

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

    public boolean sendMessage(Message m) { 
        ... 
        _myApp.requestForeground(); 
    } 
}


Cache your app instance inside your send listener when you construct it, and use that when sendMessage is fired.

Application.getApplication() only gets you the app of the calling thread.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜